2009-04-28 14 views
3

Ich versuche, einen Wert aus einem Registrierungseintrag mit Powershell zu lesen. Das ist ziemlich einfach, jedoch gibt mir ein bestimmter Registrierungsschlüssel Schwierigkeiten.Fehler beim Abrufen des Registrierungswerts mit Powershell

Wenn ich Folgendes ausführen, kann ich nicht den Wert der (Standardeinstellung) von "$ Einstellung" erhalten.

Normalerweise würde ich $ setting.Attribute, oder $ Einstellung. (Standard). Jedoch, dass die Ergebnisse in der folgenden Fehler:

C:\Program Files\PowerGUI> $setting.(default) 
The term 'default' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again. 
At :line:1 char:17 
+ $setting.(default <<<<) 

Wie kann ich den Wert des „(default)“ Attribut erhalten?

Vielen Dank im Voraus.

Antwort

8

EDIT Hatte durch und altes Skript zu sehen, um dies herauszufinden.

Der Trick ist, dass Sie in das zugrunde liegende PSObject schauen müssen, um die Werte zu erhalten. Insbesondere Blick auf die Eigenschaften Tasche

$a = get-itemproperty -path "HKLM:\Some\Path" 
$default = $a.psobject.Properties | ?{ $_.Name -eq "(default)" } 

Sie können

$default = $a.psobject.Properties["(default)"].Value; 
+0

dazu hinzuzufügen, im ursprünglichen Code des() angewiesen Powershell den Text (in diesem Fall zu behandeln "Standard") als separater Befehl. Wenn Sie Eigenschaften mit solchen ungewöhnlichen Zeichen haben, müssen Sie den Wert wie JaredPar angeben (und manchmal $() verwenden), damit PowerShell den Wert nicht als Ausdruck interpretiert. Andere Zeichen, auf die Sie achten sollten, sind $. : "" (Es kann mehr geben, aber das ist alles, woran ich mich erinnern kann) – JasonMArcher

+2

$ setting verwenden. '(Standard)', um die Klammer zu umgehen funktioniert auch. –

+0

Nur der Vollständigkeit halber erfordert das zweite Beispiel tatsächlich einen .Value am Ende . – cristobalito

4

Eine andere Version auch nur einen Indexer verwenden, anstatt den Filter Trick tun:

(Get-ItemProperty ‚HKLM: \ SOFTWARE \ Microsoft \ Windows NT \ AktuelleVersion \ IniFileMapping \ Autorun.inf ').' (Standard) '

3

Verwenden Sie Get-Item, um ein Objekt abzurufen, das den Registrierungsschlüssel darstellt:

PS > $regKey = Get-Item HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf 

Dies gibt Ihnen eine Instanz von RegistryKey. RegistryKey hat eine Methode namens GetValue; wenn das Argument zu GetValue die leere Zeichenkette ('') ist, dann wird es geben die (default) Wert:

PS > $regKey.GetValue('') 

Warum ist das besser als Get-ItemProperty? Es erstreckt sich natürlicher auf Get-ChildItem. Get-ChildItem gibt Ihnen eine Liste von RegistryKey Objekten. In meinem speziellen Fall wollte ich auf meinem Rechner die Installationspfade der Versionen von Python zur Liste installiert:

PS C:\> get-childitem HKLM:\SOFTWARE\Wow6432Node\Python\PythonCore\*\InstallPath ` 
>> | foreach-object { $_.GetValue('') } 
C:\Python26\ArcGIS10.0\ 
C:\Python\27\ 
Verwandte Themen