Test-Path -Path显示为空字符串

时间:2018-05-01 10:55:13

标签: powershell

我正在尝试在注册表中使用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\"

这里发生了什么?

2 个答案:

答案 0 :(得分:5)

Split()方法每次找到你给它的字符时都会将字符串分成两部分,从而产生一个数组。它不仅仅是从字符串末尾删除字符。

在您的案例中,有很多方法可以解决这个问题:

  1. 如果可能,请不要在第一时间将星号添加到字符串
  2. 仅使用数组中的第一项:$NewRegistryLocation = $RegistryLocation.Split("*")[0]
  3. 使用Split-Path(符合我的意图):$NewRegistryLocation = Split-Path -Path $RegistryLocation -Parent
  4. 使用-replace运算符删除星号:$NewRegistryLocation = $RegistryLocation -replace "\*",""
  5. 方法3可能是我推荐的,因为它更健壮,而且更加强大。'

答案 1 :(得分:2)

尝试替换此行

$NewRegistryLocation = $RegistryLocation.Split("*")

用这个

$NewRegistryLocation = $RegistryLocation.Split("*")[0]

所以你的NewRegistryLocation仍然会包含一个字符串,而不是一个数组。