verwenden Sie PowerShell, um die Suche nach einer Zeichenkette in der registry Schlüssel und Werte
Ich möchte mit der PowerShell zu finden, die alle registry-Schlüssel und Werte in einer bestimmten Struktur, die eine Zeichenfolge enthalten foo
- möglicherweise eingebettet in einen längeren string. Das finden der Tasten ist nicht schwer:
get-childitem -path hkcu:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*foo*"}
Das problem ist, dass ich weiß nicht, der beste Weg, um die Werte gegeben, ich weiß nicht, die Namen der Eigenschaften vor der Zeit. Ich versuchte dies:
get-childitem -path hkcu:\ -recurse -erroraction silentlycontinue | get-itemproperty | where {$_.'(default)' -like "*foo*"}
bekam aber diese Fehlermeldung:
get-itemproperty : Specified cast is not valid.
At line:1 char:69
+ ... u:\ -recurse -erroraction silentlycontinue | get-itemproperty | where ...
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ItemProperty], InvalidCastException
+ FullyQualifiedErrorId : System.InvalidCastException,Microsoft.PowerShell.Commands.GetItemPropertyCommand
selbst wenn ich Hinzugefügt -ErrorAction SilentlyContinue
zu den get-itemproperty
.
Darüber hinaus, dass nur noch die Werte der (default)
Tasten.
Außerdem ist es möglich, suchen alle Bienenstöcke in einem einzigen Befehl?
-ErrorAction SilentlyContinue
? Werte aufgelistet werden können durch aufrufen von Get-ItemProperty
auf eine Taste.danke für den Vorschlag über
-ErrorAction SilentlyContinue
. Ich hatte aufgegeben, weil er es unterlassen hatte, zu unterdrücken Fehler mit einer früheren Befehl habe ich versucht, aber es funktioniert mit diesem, so bearbeitete ich meine Frage entsprechend. Jedoch bekomme ich eine Fehlermeldung get-itemproperty : Specified cast is not valid
wenn ich diesen Befehl ausführen: get-childitem -path hkcu:\ -recurse -erroraction silentlycontinue | get-itemproperty | where {$_ -like "*foo"}
. Was müsste ich anders machen?Sie müssen den Zugang zu Eigentum, wo scriptblock.
where {$_.PSParentPath -like "*foo"}
zum BeispielInformationsquelleAutor Alan | 2017-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jede Taste verfügt über eine
GetValueNames()
,GetValueKind()
, undGetValue()
Methode, lassen Sie Sie auflisten von untergeordneten Werte. Sie können auch dieGetSubKeyNames()
statt jeGet-ChildItem -Recurse
auflisten von Schlüsseln.Zur Beantwortung Ihrer Frage über die Suche mehrere Bienenstöcke: wenn Sie beginnen, mit
Get-ChildItem Registry::\
können Sie sehen, alle Strukturen und starten Sie Ihre Suche dort. Sie werden wahrscheinlich wollen, um stick mit HKLM und HKCU (vielleicht HKU, wenn es andere user Bienenstöcke geladen).Hier ist ein Beispiel für die Implementierung, den ich eine Weile zurück auf die TechNet gallery:
Habe ich noch nicht betrachtete ihn eine Weile, und ich kann definitiv sehen, einige der Teile, die geändert werden sollten, um es besser zu machen, aber es sollte funktionieren wie ein Ausgangspunkt für Sie.
search-registry.ps1 -Path HKCU:\ -recurse -SearchRegex "DispFileName"
;search-registry.ps1 -Path HKCU:\ -recurse -KeyNameRegex "DispFileName"
; und sogar einer absichtlich schlechten Ruf:search-registry.ps1 -bad
; aber ich habe nie erhalten keine Ausgabe. Was mache ich falsch?Dieses geschrieben wird, als eine Funktion, ein Skript. Da es scheint, du hast es als Datei zu speichern, können Sie entweder den Punkt-Quelle, z.B.
. .\search-registry.ps1
sind, dann rufen SieSearch-Registry
als Befehl, oder Sie können loszuwerden, die ersten und letzten Zeilen der Datei und nennen Sie es, wie Sie bereits waren (in der ersten Zeile wärefunction Search-Registry {
, und die Letzte Zeile wäre}
)Dies funktioniert hervorragend! Aber ich sehe immer noch Fehler, wenn ich die traverse in zwei Einträgen in der registry. Ich drehte mich auf dem -verbose flag und sah, dass Sie passiert, wenn die überprüfung ValueDataRegex für
HKEY_CURRENT_USER\System\CurrentControlSet\Control\DeviceContainers\{some_guid}
. Gehen, um die registry-Schlüssel in der Registry-Editor, und klicken Sie auf "Eigenschaften" gab den gleichen Fehler, es ist also nicht falsch. Ich möchte jedoch, Sie zu unterdrücken. Ich denke, putting einen try/catch-block, um etwas in derif ($ValueDataRegex)
block im script würden helfen, aber ich bin mir nicht sicher wo es hin soll.Tatsächlich, dieses mal lief ich
c:\batch\search-registry.ps1 -Path HKCU:\ -recurse -SearchRegex <search_string> -ErrorAction SilentlyContinue
haben und nicht sehen, keine Fehlermeldungen, so dass ich bin in Ordnung.Ich fragte eine neue Frage, falls du daran interessiert bist, Sie zu beantworten: stackoverflow.com/questions/43239949/...
InformationsquelleAutor Rohn Edwards
Dies ist ein Ersatz für get-itemproperty, die dumps aus der registry auf einfache Weise. Es ist einfach zu bedienen mit where-object. Sie können auch pipe an set-itemproperty.
InformationsquelleAutor js2010
Hier ist eine super-schnelle Umsetzung einer reg-Suche per Powershell in Fall müssen Sie Scannen einen großen Teil der registry:
https://stackoverflow.com/a/55853204
InformationsquelleAutor Peter