Powershell:如何将字节字符串与二进制注册表值进行比较

时间:2014-02-14 19:37:24

标签: powershell registry

我有一个二进制注册表值,我想检查Powershell脚本的一致性。我正在通过以下方式检索该值:

(Get-ItemProperty -Path HKLM:\Software\ORL\WinVNC3 -Name ACL).ACL

这会返回一个字节字符串。

然后我创建一个字节字符串变量,该变量与我期望的相匹配,然后通过regedit.exe导出注册表项来查询该值。然后,我通过在用逗号分隔的每个字节前面加上“0x”并输入为[byte],从该文本创建一个字节串。当我只看两个弦时,它们完全相同。但是,当我:

$RegistryValue -eq $CreatedValue

他们不会返回True。我做错了什么?

2 个答案:

答案 0 :(得分:4)

尝试使用compare-object cmdlet。

Compare-Object $RegistryValue $CreatedValue

如果它们相等,您应该在结果表中看到==运算符。

答案 1 :(得分:1)

我终于通过一些不同的方法和Compare-Object cmdlet的组合来解决这个问题。谢谢,达拉斯。

  1. 在注册表中设置适当的二进制值。
  2. 通过以下方式检索值:
  3. $ ValueItsSupposedToBe =(Get-ItemProperty -Path HKLM:\ Software \ ORL \ WinVNC3 -Name ACL).ACL

    1. 创建一个逗号,分隔的值字符串,并将此字符串插入比较脚本。

    2. 在比较脚本中,拆分字符串并将其转换为字节数组。

    3. [byte []] $ ValueItsSupposedToBe = $ ValueItsSupposedToBe.Split(',')

      1. 读取当前在另一台计算机上设置的值。
      2. $ CompareValue =(Get-ItemProperty -Path HKLM:\ Software \ ORL \ WinVNC3 -Name ACL).ACL

        1. 如果Compare-Object返回为null,则它们相等。
        2. Compare-Object $ CompareValue $ ValueItsSupposedTobe