具有非标准键名的拆分路径

时间:2018-04-03 12:09:19

标签: powershell registry

如何处理这样的路径 的 HKEY_LOCAL_MACHINE \ SOFTWARE \ MozillaPlugins \ @ microsoft.com /正品 使用Split-Path时?接近结尾处的正斜杠被视为反斜杠,因此 GENUINE 被视为单独的密钥,而不是 @ microsoft.com / GENUINE 作为密钥。 或许更好的问题是,在这种情况下如何使用Get-ItemProperty?我总是使用Split-Path HKEY_LOCAL_MACHINE \ SOFTWARE \ Key \ Property 这样的路径中将Key与Property分开,但这里失败了。我希望能够提供一个我可以在代码中拆分的字符串,并支持旧版本的PowerShell。 我知道蛮力的方法是只查找反斜杠的最后一个实例,左边的所有内容都是键,右边是属性,但我想知道是否有更优雅的选项。或者,我遗漏的东西会使这种方法甚至不起作用?

编辑: 所以,为了验证,我可以让它工作

$path = 'HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE\GeckoVersion'
$location = $path.LastIndexOf('\')
$key = $path.Substring(0,$location)
$property = $path.Substring($location+1)
$currentValue = (Get-ItemProperty -path:$key -name:$property).$property
Write-Host "$key "
Write-Host "$property"
Write-Host "$currentValue"

但是,似乎Split-Path应该更好地处理这个问题(毕竟,路径是一条有效的路径)。还有两个,我不确定在最后一个实例上的暴力强迫没有一些隐藏的方面。

编辑: 我正在考虑使用以下方法保持XML简单(即单个节点),同时还允许指定Key或Property,以及向后与简单路径的兼容性。所以... 这就是我之前的事情

<Rule>[node] regPropertyExists:"HKLM\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE\GeckoVersion" -eq True</Rule>

这就是我为特定属性路径所做的事情

<Rule>[node] regPropertyExists:"HKLM\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE P:GeckoVersion" -eq True</Rule>

只要没有人P:作为钥匙或属性名称的一部分,前面有空格我就是好人。这似乎是一个我可以忍受的边缘案例。 我也支持像这样的密钥特定路径

<Rule>[node] regKeyExists:"K:HKLM\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE" -eq True</Rule>

这是一个向后兼容的路径

<Rule>[node] regPropertyExists:"HKLM\SOFTWARE\Px Tasks\Delete_Ex\Test" -eq True</Rule>

代码测试找到的密钥和属性,如果我无法解析为单个项目,则会抛出错误。

任何人都会看到这种方法中的任何陷阱?

0 个答案:

没有答案