2013-05-28 10 views
13

Cerco di creare un elemento utilizzando Set-ItemProperty in PowerShell, che funziona sulla maggior parte dei sistemi:Set-ItemProperty imposta il valore del registro come stringa su alcuni sistemi anziché DWord, perché?

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

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

Questo crea un DWORD valore sulla maggior parte dei sistemi Windows 7, ma ho trovato un sistema in cui questo crea uno STRING valore invece, e voglio sapere: perché? Cosa potrebbe accadere che i sistemi si comportino diversamente? Tutti non hanno quel valore già impostato, tutti usano la stessa immagine di base usando la stessa versione di Powershell.

Btw, ho scoperto che utilizzando il seguente codice, è possibile impostare in modo esplicito un tipo, quindi ho già risolto il problema:

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

Ma solo per curiosità, voglio sapere perché i sistemi comportano in modo diverso .

risposta

21

Non ho una risposta al motivo per cui accade ma per evitare tali casi, essere esplicito. Utilizzare il tipo di parametro (dinamica) e specificare un valore RegistryValueKind (si può anche usare con New-ItemProperty):

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

Il '-Type' è documentato ovunque? –

3

Prova questa.

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

Questo funziona bene per le versioni precedenti di PowerShell dove per qualche strana ragione il parametro -type non sembra esistere. –