我正在尝试在注册表中使用Test-Path
,示例代码:
$RegistryLocation = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
这很好用:
Test-Path -Path $RegistryLocation
真。现在没有最后的星号字符:
$NewRegistryLocation = $RegistryLocation.Split("*")
Test-Path -Path $NewRegistryLocation
Cannot bind argument to parameter 'Path' because it is an empty string.
但这可行($NewRegistryLocation
变量的值):
Test-Path -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
这里发生了什么?
答案 0 :(得分:5)
Split()
方法每次找到你给它的字符时都会将字符串分成两部分,从而产生一个数组。它不仅仅是从字符串末尾删除字符。
在您的案例中,有很多方法可以解决这个问题:
$NewRegistryLocation = $RegistryLocation.Split("*")[0]
Split-Path
(符合我的意图):$NewRegistryLocation = Split-Path -Path $RegistryLocation -Parent
-replace
运算符删除星号:$NewRegistryLocation = $RegistryLocation -replace "\*",""
方法3可能是我推荐的,因为它更健壮,而且更加强大。'
答案 1 :(得分:2)
尝试替换此行
$NewRegistryLocation = $RegistryLocation.Split("*")
用这个
$NewRegistryLocation = $RegistryLocation.Split("*")[0]
所以你的NewRegistryLocation
仍然会包含一个字符串,而不是一个数组。