2013-04-22 9 views
7

Per un'applicazione legacy, è necessario creare una chiave di registro con un nome nel formato c:/foo/bar/baz. (Nota: barre in avanti, non barre retroverse.) Per essere chiari: questo è il nome di una singola chiave, con barre in avanti, che in caso contrario assomiglia a un percorso di Windows. Perché ho bisogno di script questo contro un sacco di server, PowerShell sembra una grande opzione.Creazione di una chiave di registro con componenti di percorso tramite PowerShell

Il problema è che non riesco a capire come creare una chiave in quel formato tramite PowerShell. New-Item -Path HKLM:\SOFTWARE\Some\Key -Name 'c:/foo/bar/baz' errori con PowerShell pensando che sto usando / come separatore di percorso e non riesco a trovare il percorso HKLM:\Software\Some\Key\c:\foo\bar, che in effetti non esiste (e non dovrebbe). Non riesco a trovare nessun altro modo di (ab) utilizzare New-Item per ottenere quello che voglio.

C'è qualcosa che mi manca, o dovrei rinunciare e solo generare e caricare un registro di discarica alla vecchia maniera?

risposta

11

Hai bisogno di fare due cose. Per prima cosa devi ottenere un oggetto scrivibile RegistryKey, altrimenti non puoi comunque modificare nulla. In secondo luogo, utilizzare direttamente il metodo CreateSubKey sull'oggetto RegistryKey.

$writable = $true 
$key = (get-item HKLM:\).OpenSubKey("SOFTWARE", $writable).CreateSubKey("C:/test") 
$key.SetValue("Item 1", "Value 1") 

Dopo aver creato la chiave, si utilizza l'oggetto risultante per aggiungervi valori.

+1

Ho pensato che FogBugz avesse le chiavi in ​​questo modo, ma le barre vanno dall'altra parte: http://i42.tinypic.com/154jzac.jpg –

+0

@DannyTuppeny Hai indovinato il software, ma in realtà sono delle barre in avanti nel mio originale domanda. PowerShell sta semplicemente usando il fatto che i percorsi UNC trattano "\" e "/" in modo identico per rendere la mia vita fastidiosa. –

+0

@BenjaminPollack Oops, non ho letto correttamente la domanda! Sembra che questa funzione "utile" potrebbe rendere impossibile fare in modo nativo. Potresti chiamare su .NET, ma ovviamente non è l'ideale :-( –

Problemi correlati