Подтвердить что ты не робот

Более сжатый способ получить значение реестра как строку, чем (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
4b9b3361

Ответ 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