В PowerShell, как загрузить несколько значений в переменную? - PullRequest
0 голосов
/ 03 октября 2019

У меня есть требование проверить несколько значений ключа реестра, и я хочу автоматизировать этот процесс с помощью PowerShell. Один из проверяемых ключей реестра имеет 3 значения, и я не могу успешно проверить его с помощью сценария PowerShell.

Я не верю, что правильно загружаю переменную $value, чтобы ее можно было сравнитьк значению $path.

$path = (Get-ItemProperty HKLM:\System\CurrentControlSet\Services\LanManServer).NullSessionPipe

$value = “netlogon samr lsarpc”

if ($path -ne $value) {
    Write-Host “Value is incorrect or missing.”
} else {
    Write–Host “Config is correct.”
}

Я ожидаю, что результат будет

Конфигурация верна.

Вместо этого я получаю

Значение неверное или отсутствует.

Используя Regedit, я вижу, что ключ имеет правильные значения.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

@ Ansgar, после некоторых экспериментов я смог заставить скрипт работать. Я удалил пробелы и добавил возврат каретки после netlogon и samr. Это прекрасно работает !!!

$ path = (Get-ItemProperty HKLM: \ System \ CurrentControlSet \ Services \ LanManServer) .NullSessionPipe

$ value = 'netlogon',
'samr',
' lsarpc '

if (Compare-Object $ path $ value) {' массивы отличаются '} else {' массивы равны '}

0 голосов
/ 03 октября 2019

NullSessionPipe, очевидно, является REG_MULTI_SZ, что означает, что данные возвращаются в виде массива строк. Вы можете сделать "$path" -ne $value, чтобы преобразовать массив в плоскую строку, но это будет означать, что порядок подстрок одинаков в обеих строках. Лучше всего сравнивать массивы с помощью Compare-Object.

$path  = (Get-ItemProperty HKLM:\...).NullSessionPipe
$value = 'netlogon', 'samr', 'lsarpc'

if (Compare-Object $path $value) {
    'arrays differ'
} else {
    'arrays are equal'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...