2013-05-28 6 views
13

Próbuję utworzyć element przy użyciu Set-ItemProperty w PowerShell, który działa na większości systemów:Ustaw-ItemProperty ustawia wartość Rejestru jako String na niektórych systemach zamiast na DWORD, dlaczego?

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

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

Stwarza to DWORD wartość na większości systemów Windows 7, ale znalazłem jeden system, w którym tworzy to String zamiast tego wartość i chcę wiedzieć: dlaczego? Co może się zdarzyć, że systemy zachowują się inaczej? Wszystkie nie mają już ustawionej wartości, wszystkie używają tego samego podstawowego obrazu przy użyciu tej samej wersji Powershell.

Btw, stwierdziliśmy, że za pomocą następującego kodu, mogę jednoznacznie określić typ, więc ja już rozwiązał ten problem:

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

Ale tylko dla ciekawości, chciałbym wiedzieć, dlaczego systemy zachowują się inaczej .

Odpowiedz

21

Nie mam odpowiedzi na pytanie, dlaczego tak się dzieje, ale należy unikać takich przypadków. Użyj typu (dynamiczny) parametr i określić wartość RegistryValueKind (można również używać go z New-ItemProperty):

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

Czy "-Type" jest udokumentowane w dowolnym miejscu? –

3

Spróbuj tego.

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

Działa to dobrze w starszych wersjach powłoki, gdzie z jakiegoś powodu wydaje się, że parametr -type nie istnieje. –

Powiązane problemy