2013-08-13 9 views
7

muszę utworzyć następujący wpis rejestru HKLM:\software\bmc software\control-m/agent ale mam problem ze względu na ukośnikiem przed „agent”Jak utworzyć wpis rejestru z ukośnikiem w nazwie

nie mam problemu z utworzeniem wpis, który nie ma ukośnika na przykład:

PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-mXXXagent' 

Ale tworząc z ukośnikiem kończy się niepowodzeniem.

PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-m/agent' 

New-Item: Klucz rejestru w określonej ścieżce nie istnieje. Na linii: 1 char: 10 + nowa-poz < < < < path "HKLM: \ Software \ BMC Software \ Control-M/agenta + CategoryInfo: InvalidArgument: (HKEY_LOCAL_MACH ... tware \ Control-m : String) [New-Item], ArgumentExceptio n + FullyQualifiedErrorId: System.ArgumentException, Microsoft.PowerShell.Commands.NewItemCommand

i używając PowerShell backtic `uciec charakter nie pomogło.

PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-m`/agent' 

New-Item: Klucz rejestru w określonej ścieżce nie istnieje. Na linii: 1 char: 10 + nowa-poz < < < < path „HKLM: \ Software \ BMC Software \ Control-M /agent' + CategoryInfo : InvalidArgument: (HKEY_LOCAL_MACH...ware\control-m: String) [New-Item], ArgumentExceptio n + FullyQualifiedErrorId: System. ArgumentException, Microsoft.PowerShell.Commands.NewItemCommand

Porady będą mile widziane. Dzięki

+2

możliwe duplikat [Tworzenie klucza rejestru z elementów ścieżki za pomocą PowerShell] (http://stackoverflow.com/questions/16149175/creating-a-registry-key-with-path-components-via-powershell) –

+0

Czy możesz utworzyć go ręcznie? W jaki sposób zapisać ścieżkę jako ciąg, używając zamiast tego opcji -path $ string? –

+0

Wypróbuj -literalpath? – Eris

Odpowiedz

-1

Szczegółowy poniżej jest przykładem, jak można strunowe razem wpisy rejestru w tym ukośnik:

$value = "2048" 
$value1 = "0" 
$regpath = "hklm:\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters" 
$name = "MaxCmds" 
$name1 = "RequireSecuritySignature" 
$PropertyType = "Dword"  
New-ItemProperty -path $regpath -name $name -value $value -PropertyType $PropertyType 
Set-ItemProperty -path $regpath -name $name1 -value $value1 

więc na swoje wymagania, wykonaj następujące czynności:

$name1 = "something with a /" 
+0

Program OP pyta, jak utworzyć klucz RegKey, a nie właściwość. – Eris

1

Wszelkie druku znaków z wyjątkiem \ jest poprawna w nazwie klucza rejestru, ale powodem, dla którego ukośnik w przód nie działa w ścieżkach rejestru, jest to, że PowerShell akceptuje ukośniki w przód jako separatory ścieżek. Tak więc, New-Item -Path 'HKLM:\software\bmc software\control-m/agent' jest taki sam jak New-Item -Path 'HKLM:\software\bmc software\control-m\agent', tj. Próbuje dodać klucz o nazwie agent do HKLM: \ oprogramowanie \ bmc oprogramowanie \ control-m, które nie istnieje.

Masz kilka możliwości obejścia tego.

Jeśli chcesz po prostu chcieć czegoś, co wygląda jak przedni ukośnik i nie jest ważne, aby miał on postać ukośnika ASCII, najprostszą rzeczą, jaką możesz zrobić, to zamiana ukośnika podziału na Unicode.można interpolować go w cudzysłowach ciąg jak poniżej:

New-Item -Path 'HKLM:\software\bmc software' -Name "control-m$([char]0x2215)agent" 

(To działa także jeśli umieścić wszystko w -path argumentu, ale to chyba lepiej zwyczaj robić to w ten sposób, więc don nie musisz się martwić o znaki specjalne na pozostałej części ścieżki.)

Jeśli ma to być ukośnik ASCII, możesz użyć metody z posta powiązanego z Ansgar Wiechers i opracowanego przez Keitha Hill'a, lub za pomocą .NET można utworzyć podklucz:

([Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $env:COMPUTERNAME)).CreateSubKey('Software\bmc software\control-m/agent') 
  • Pierwszy parametr metody OpenRemoteBaseKey określa gałąź rejestru. W przypadku klucza w kluczu HKCU zmień LocalMachine na CurrentUser.
  • Drugi parametr określa nazwę komputera, do którego dostęp będzie rejestrowany. Można określić komputer zdalny, jeśli usługa rejestru zdalnego jest uruchomiona na tym komputerze.
+0

Sprawdziłem, czy działa to zarówno w Powershell V2, jak i V3 – Eris

+0

OK, ale to nie jest rzeczywisty ukośnik. Jest to kolejny kodowy kod unicode, który wygląda podobnie. –

+0

@KeithHill Dobry połów. Zrobiłem szybkie wyszukiwanie google "unicode forward slash" i złapałem niepoprawną odpowiedź. Powinienem zauważyć, że był zbyt wysoki, by znaleźć się w normalnym zakresie ASCII.To w rzeczywistości ukośnik podziału. Zostawię to w odpowiedzi, ponieważ dla niektórych celów może być łatwiej użyć fałszywego ukośnika niż alternatywnych metod pracy z rejestrem, ale dodam inny sposób na zrobienie tego (z prawdziwym ukośnikiem) . –

5

Jest to niewielka modyfikacja stanowisku, że Ansgar wskazał:

new-item -path 'HKLM:\software\bmc software' 
$key = (get-item HKLM:\).OpenSubKey("SOFTWARE\bmc software", $true) 
$key.CreateSubKey('control-m/agent') 
$key.Close() 

Stwarza to klucz przy założeniu / Char (0x2F).

+0

Aby dodać "control-m/agent" jako zmienną użyj: $ key.CreateSubKey ($ keyVar) bez znaków podziałki – Brettski

0

Może być konieczne osadzenie polecenia DOS w PowerShell.

$PathCMD = "HKEY_LOCAL_MACHINE\Software\BMC Software" 
$command = 'cmd.exe /C reg.exe add "$PathCMD\control-m/agent"' 
Invoke-Command -Command $ExecutionContext.InvokeCommand.NewScriptBlock($command) 
Powiązane problemy