2013-05-28 68 views
13

我嘗試創建PowerShell中使用Set-ItemProperty的項目,這在大多數系統的工作原理:Set-ItemProperty在某些系統上將註冊表值設置爲字符串而不是DWord,爲什麼?

New-PSDrive -name HKCR -PSProvider Registry -root HKEY_CLASSES_ROOT 

Set-ItemProperty -Path HKCR:\Software\MyCompany\ -Name Level -Value 5 -ErrorAction SilentlyContinue 

這就造成在大多數Windows 7系統的DWORD值,但我發現一個系統,其中,這將創建一個與字符串價值,而我想知道:爲什麼?系統的行爲有什麼不同?所有這些值都沒有設置,都使用相同的基礎鏡像使用相同的Powershell版本。

順便說一句,我發現,通過使用下面的代碼,我可以明確地設定一個類型,所以我已經解決了這個問題:

New-ItemProperty -Path HKCR:\Software\MyCompany\ -Name Level -Value 5 -ErrorAction SilentlyContinue -PropertyType DWord 

但只是出於好奇,我想知道爲什麼系統表現不同。

回答

21

我沒有答案,爲什麼會發生,但要避免這種情況下,明確。使用Type(動態)參數,並指定一個RegistryValueKind值(你也可以New-ItemProperty使用它):

Set-ItemProperty -Path HKCR:\Software\MyCompany -Name Level -Value 5 -Type DWord 
+2

「-Type」是否記錄在任何地方? –

3

試試這個。

[Microsoft.Win32.Registry]::SetValue("HKEY_CLASSES_ROOT\Software\MyCompany","Level",5,[Microsoft.Win32.RegistryValueKind]::DWord) 
+1

這適用於較老的powershell版本,其中出於某種奇怪的原因-type參數似乎不存在。 –

相關問題