Wie bekomme ich den Wert eines Registrierungsschlüssels und nur den Wert mit Powershell
Kann mir jemand helfen, ziehen Sie den Wert eines registry-Schlüssel und legen Sie Sie in eine variable in PowerShell? Bisher habe ich verwendet Get-ItemProperty
und reg query
und obwohl beide ziehen den Wert, sowohl auch zusätzliche text. Ich brauche nur den string text aus dem Registrierungsschlüssel und NUR den string text aus dem Schlüssel. Ich bin sicher, ich könnte eine Funktion erstellen ausziehen, den extra text, aber wenn sich etwas ändert (d.h. reg-key-name) es könnte dieses beeinflussen.
InformationsquelleAutor der Frage Alan Anderson | 2013-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich nie gemocht, wie das war-provider implementiert wurde : /
Im Grunde macht jeder registry-Wert eine
PSCustomObject
Objekt mitPsPath
PsParentPath
PsChildname
PSDrive
undPSProvider
"Eigenschaften" und dann eine Eigenschaft für den tatsächlichen Wert. So, obwohl Sie aufgefordert, den Element-Namen, um dessen Wert Sie haben, verwenden Sie den Namen noch einmal.InformationsquelleAutor der Antwort Andy Arismendi
KEINER von diesen Antworten arbeiten für die Situationen, in denen der Wert name enthält Leerzeichen, Punkte oder andere Zeichen, die reserviert sind, in der PowerShell. In diesem Fall müssen Sie wickeln Sie den Namen in doppelte Anführungszeichen als pro http://blog.danskingdom.com/accessing-powershell-variables-with-periods-in-their-name/ - zum Beispiel:
Wenn Sie möchten, um Zugang 14.0, 12.0, 11.0, 15.0-Werte, die Lösung von der akzeptierten Antwort wird nicht funktionieren - erhalten Sie keine Ausgabe:
Was funktioniert ist unter Angabe der Namen des Wertes, das sollten Sie wohl tun, trotzdem zur Sicherheit:
So, die akzeptierten Antworten sollte geändert werden wie folgt:
Dies funktioniert in der PowerShell 2.0 bis 5.0 (obwohl Sie wahrscheinlich mit
Get-ItemPropertyValue
in v5).InformationsquelleAutor der Antwort Ian Kemp
Hinweis: Alle Lösungen unter bypass das beschriebene problem in Ian Kemp ' s's Antwort - die Notwendigkeit, verwenden Sie die explizite Quotierung für bestimmte Wert-Namen, wenn Sie als Eigenschaft Namen; z.B.
.'15.0'
- weil die Feldnamen übergeben werden, wie Parameter und Eigentum der Zugriff geschieht über eine variable; z.B..$ValueName
Harry Martyrossian erwähnt in einem Kommentar auf seine eigene Antwortdass die
Get-ItemPropertyValue
- cmdlet eingeführt wurde Powershell v5die das problem löst:Alternativen für PowerShell v4-:
Hier ist ein Versuch, behalten die Effizienz und eliminiert die Notwendigkeit für die Wiederholung des Wertes Namen, die jedoch noch ein wenig umständlich:
Indem Sie ein Skript block, wird der Wert-name übergeben werden kann, in einmal als einen parameter, und der parameter-variable (
$args
) kann dann einfach doppelt genutzt werden, in den block.Alternativ eine einfache Hilfsfunktion, die können die Schmerzen lindern:
InformationsquelleAutor der Antwort mklement0
Ich bin mir nicht sicher, ob das geändert wurde, oder wenn es etwas zu tun mit, welche version von PS verwendest du, aber mit Andy ' s Beispiel, ich kann entfernen Sie den parameter-Name und ich bekomme immer noch den Wert des reg-item:
InformationsquelleAutor der Antwort M Jeremy Carter
Gut zu sein, müssen Sie bestimmte hier. Soweit ich weiß, wird der Schlüssel in eine registry ist ein "Ordner" Eigenschaften". Also meinst du, um den Wert einer Immobilie? Wenn ja, versuchen Sie so etwas wie dieses:
Zuerst bekommen wir ein Objekt mit der Eigenschaft, die wir brauchen, mit
Get-ItemProperty
und dann bekommen wir den Wert für die Eigenschaft, die wir brauchen, von diesem Objekt. Das wird wieder den Wert der Eigenschaft als string. Das obige Beispiel gibt dir die PS-version für "legacy"/Kompatibilität-mdoe powershell (1.0 oder 2.0).InformationsquelleAutor der Antwort Frode F.
Folgenden code: auflisten aller Werte eines bestimmten Registry-Schlüssel, Sortieren diese und return-Wert name : Wert-Paare getrennt durch Doppelpunkt (:):
Wie diese:
DbgJITDebugLaunchSetting : 16
DbgManagedDebugger : "C:\Windows\system32\vsjitdebugger.exe" PID %d APPDOM %d EXTEXT "%s" EVTHDL %d
InstallRoot : C:\Windows\Microsoft.NET\Framework\
InformationsquelleAutor der Antwort Harry Martyrossian
Wenn Sie ein Objekt erstellen, erhalten Sie eine besser lesbare Ausgabe und gewinnen auch ein Objekt mit Eigenschaften, die Sie zugreifen können:
Beispiel-Ausgabe:
InstallRoot : C:\Windows\Microsoft.NET\Framework\
Und das Objekt:
$obj.InstallRoot = C:\Windows\Microsoft.NET\Framework\
Ist die Wahrheit der Sache ist, das ist viel komplizierter, als es sein muss. Hier ist ein viel besseres Beispiel, und viel einfacher:
$objReg ist jetzt ein benutzerdefiniertes Objekt, wobei jeder Eintrag in der Registrierung wird eine Eigenschaft name. Sehen Sie die formatierte Liste per:
Und Sie haben Zugang zum Objekt selbst:
InformationsquelleAutor der Antwort Steve Fellwock
Key
\SQL
mit zwei Eigenschaften:Ich würde greifen die "MSSQLSERVER" mit der folgenden in-Fälle wo ich nicht sicher war, was der name der Eigenschaft war, zu verwenden dot-notation:
InformationsquelleAutor der Antwort Adam