2014-02-14 62 views
1

我有一個二進制註冊表值,我想檢查Powershell腳本中的一致性。我通過檢索值:Powershell:如何將字節字符串與二進制註冊表值進行比較

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

這將返回一個字節的字符串作爲結果。

然後,我創建一個字節字符串變量,該字符串變量與我期望的匹配,然後通過regedit.exe導出註冊表項來查詢此值。然後,我通過在用逗號分隔的每個字節前添加「0x」來創建一個字符串,並且鍵入是[byte]。當我只是看到兩個琴絃時,他們完全一樣。但是,當我:

$RegistryValue -eq $CreatedValue 

它們不返回True。我究竟做錯了什麼?

+0

什麼類型的變量?根據類型,[比較運算符](http://technet.microsoft.com/en-us/library/hh847759(v = wps.620).aspx)的工作方式不同。數組和集合不會評估平等。 – beavel

+0

我能夠想出的兩個變量都是字節類型。 –

+0

'$ RegistryValue.GetType()。Fullname'返回什麼?在[Byte]類型的變量中不應該有任何「0x」(http://msdn.microsoft.com/en-us/library/System.Byte(v = vs.90))。aspx) – beavel

回答

1

我終於通過組合了一些不同的方法和比較對象cmdlet,想到了這一點。謝謝,達拉斯。

  1. 在註冊表中設置適當的二進制值。
  2. 通過檢索值:

$ ValueItsSupposedToBe =(GET-ItemProperty -Path HKLM:\ SOFTWARE \ ORL \ WinVNC3 -Name ACL).ACL

  1. 創建一個逗號,分隔字符串的值並將此字符串插入比較腳本中。

  2. 在比較腳本中,拆分字符串並將其轉換爲字節數組。

[字節[]] $ ValueItsSupposedToBe = $ ValueItsSupposedToBe.Split( '')

  1. 閱讀目前另一臺機器上設置的值。

$選擇compareValue =(GET-ItemProperty -Path HKLM:\ SOFTWARE \ ORL \ WinVNC3 -Name ACL).ACL

  1. 如果比較-對象回來爲空,則它們相等。

比較-對象$選擇compareValue $ ValueItsSupposedTobe

4

嘗試使用compare-object cmdlet。

Compare-Object $RegistryValue $CreatedValue 

如果他們是平等的,你應該看到在結果表中==操作。

相關問題