2010-10-18 32 views
0

J'essaie d'utiliser set-ItemProperty pour ajouter un élément à: HKLM: \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Setup \ Sources d'installationSet-ItemProperty ne comprendra pas les nouvelles lignes (Powershell)

$InstallationSources = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" -Name "Installation Sources" 
$test = $InstallationSources."Installation Sources" + "C:\Test\I386" 
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" -Name "Installation Sources" "$test" 

Je peux répéter $ test et ça a l'air bien, plusieurs lignes de chemins avec mon ajout à la fin. Mais quand j'utilise réellement set-itemproperty, il écrase tout en une ligne, ce qui ne marche pas. Chaque chemin doit avoir sa propre ligne. Même les nouvelles lignes ajoutées manuellement ne sont pas transmises (ie: "` nC: \ Test \ I386 "). Des idées?

Merci

Répondre

0

$ test est un tableau de chaînes et Powershell est automatiquement les réunir pour vous lorsque vous dites:

"$test" 

Vous devez faire vous-même rejoindre, en fournissant le caractère de séparation correcte. i.e. .:

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" -Name "Installation Sources" ($test -join "`n") 
1

Si vous souhaitez conserver des sauts de ligne puis assurez-vous la valeur de Registre est de type MultiString sinon le registre ne permettra pas à l'AFAICT des sauts de ligne .: par exemple

PS> New-ItemProperty hkcu:\ -Name bar -PropertyType MultiString 
PS> Set-ItemProperty hkcu:\ -Name bar -Value "contents`r`nmore contents" 
PS> Get-ItemProperty hkcu:\ -Name bar 


PSPath  : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\ 
PSParentPath : 
PSChildName : HKEY_CURRENT_USER 
PSDrive  : HKCU 
PSProvider : Microsoft.PowerShell.Core\Registry 
bar   : {contents 
       more contents}