web-dev-qa-db-fra.com

Un moyen plus succinct d'obtenir une valeur de registre sous forme de chaîne que (Get-ItemProperty $ key $ valueName) ._ VALUENAME_?

La méthode pour obtenir une valeur dans une clé de registre à partir de PowerShell est la suivante:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion CommonFilesDir

Cependant, cette commande retourne des propriétés supplémentaires que je ne veux généralement pas:

CommonFilesDir : C:\Program Files\Common Files
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry

Je veux juste la valeur réelle, une chaîne dans ce cas. Pour ce faire, je dois utiliser le plus prolixe:

$commonFilesDir = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion CommonFilesDir).CommonFilesDir

En dehors de l'écriture de mon propre alias, existe-t-il un moyen de ne pas écrire le nom de la propriété deux fois et d'obtenir un string ?

Je pourrais exécuter la commande suivante, mais elle renvoie un PSObject:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select CommonFilesDir
14
Justin Dearing

PowerShell est nouveau pour moi, mais cela semble fonctionner dans PowerShell 2 et 3 si vous omettez le nom de la valeur de registre dans Get-ItemProperty, en utilisant le nom de la valeur uniquement comme propriété:

(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir

ou même plus court avec l'alias:

(gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir

Aucune répétition du nom de valeur, clean, et cela ne peut pas être beaucoup plus succinct.

13
jlalughery

Ce n'est pas moins maladroit, mais il n'y a pas de répétition si c'est une démangeaison que vous devez gratter:

(gi HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).GetValue("CommonFilesDir")

(Personnellement, j'utiliserais $env:commonprogramfiles mais ce n'est pas le cas.)

4
x0n

Qu'en est-il de:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | `
    Select CommonFilesDir
3

Je vais reproduire une réponse de Mike Shepard ici (voir le commentaire sous la réponse de Musaab) puisqu'il ne l'a pas affichée lui-même. C'est mieux car vous n'avez pas à mettre le nom de la variable dans votre code.

Donc, vous pouvez prendre ceci:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select -expandproperty CommonFilesDir

Et au lieu de faire ceci:

$w = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
$q = "CommonFilesDir"
Get-ItemProperty $w | Select -expandproperty $q
0
Chris