14

从 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
4

4 回答 4

13

我是 PowerShell 的新手,但如果您在 Get-ItemProperty 中省略注册表值名称,它似乎可以在 PowerShell 2 和 3 中工作,仅使用值名称作为属性:

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

甚至更短的别名:

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

没有重复值名称,干净,再简洁不过了。

于 2013-09-14T21:04:59.293 回答
4

这同样笨拙,但如果这是你需要抓挠的痒,那就没有重复了:

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

(我个人会使用$env:commonprogramfiles,但这不是重点。)

于 2013-05-01T20:12:02.777 回答
3

关于什么:

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion | `
    Select CommonFilesDir
于 2013-05-01T12:40:54.213 回答
0

我将在这里复制 Mike Shepard 的答案(请参阅 Musaab 的答案下的评论),因为他自己没有发布。这更好,因为您不必将变量的名称放在代码中。

所以你可以采取这个:

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

而是这样做:

$w = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
$q = "CommonFilesDir"
Get-ItemProperty $w | Select -expandproperty $q
于 2018-08-06T14:44:42.197 回答