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
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.
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.)
Qu'en est-il de:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | `
Select CommonFilesDir
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