Более сжатый способ получить значение реестра как строку, чем (Get-ItemProperty $key $valueName)._ VALUENAME_?
Метод получения значения в разделе реестра из PowerShell:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion CommonFilesDir
Однако эта команда возвращает некоторые дополнительные свойства, которые обычно не нужны:
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
Мне просто нужно фактическое значение, строка в этом случае. Для этого я должен использовать более подробные:
$commonFilesDir = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion CommonFilesDir).CommonFilesDir
Помимо написания собственного псевдонима, существует ли способ не записывать имя свойства дважды и получать строку?
Я мог бы запустить следующую команду, но он возвращает PSObject:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select CommonFilesDir
Ответы
Ответ 1
Я новичок в PowerShell, но, похоже, работает в PowerShell 2 и 3, если вы не укажете имя параметра реестра в Get-ItemProperty, используя имя значения только как свойство:
(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir
или даже короче с псевдонимом:
(gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CommonFilesDir
Нет повторения имени значения, чистый, и он не может быть более сжатым.
Ответ 2
Это не менее неуклюже, но нет повторения, если это зуд, который вам нужно поцарапать:
(gi HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).GetValue("CommonFilesDir")
(лично я использовал бы $env:commonprogramfiles
, но помимо точки.)
Ответ 3
Как насчет:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | `
Select CommonFilesDir
Ответ 4
Я собираюсь повторить ответ Майка Шепарда здесь (см. Комментарий под ответом Мусааба), поскольку он сам не опубликовал его. Это лучше, потому что вам не нужно указывать имя переменной в вашем коде.
Так что вы можете взять это:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | Select -expandproperty CommonFilesDir
И вместо этого сделайте это:
$w = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
$q = "CommonFilesDir"
Get-ItemProperty $w | Select -expandproperty $q