Test-Path -Path отображается как пустая строка - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь использовать Test-Path в реестре, пример кода:

$RegistryLocation = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"

Это прекрасно работает:

Test-Path -Path $RegistryLocation

True. Теперь без последнего символа звездочки:

$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 голосов
/ 01 мая 2018

Метод Split() разбивает строку на два каждый раз, когда находит символы, которые вы ей даете, создавая массив. Это не просто удаление символа из конца строки.

Есть несколько способов обойти это в вашем случае:

  1. Если возможно, не добавляйте звездочку в строку в первую очередь
  2. Использовать только первый элемент в массиве: $NewRegistryLocation = $RegistryLocation.Split("*")[0]
  3. Используйте Split-Path (что, как я думаю, вы хотели): $NewRegistryLocation = Split-Path -Path $RegistryLocation -Parent
  4. используйте оператор -replace для удаления звездочки: $NewRegistryLocation = $RegistryLocation -replace "\*",""

Вероятно, я бы порекомендовал метод 3, так как он более надежный и PowerShelly.

0 голосов
/ 01 мая 2018

Попробуйте заменить эту строку

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

с этим

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

так что ваш NewRegistryLocation будет по-прежнему содержать строку, а не массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...