我在工作中需要检查多个注册表项值,并且我想使用 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 我可以看到该键具有正确的值。
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'
}
@Ansgar,经过一些实验,我能够使脚本正常工作。我删除了空格,并在netlogon和samr后面添加了回车符。效果完美!!!
$path = (Get-ItemProperty HKLM:\System\CurrentControlSet\Services\LanManServer).NullSessionPipe
$value = 'netlogon',
'萨姆尔',
'lsarpc'
if (比较对象 $path $value) { '数组不同' } 别的 { '数组是相等的' }