2017-05-30 6 views
-1

Ich versuche nach Mustern wie oben in allen Dateien zu suchen, die im Laufwerk D vorhanden sind. Es braucht viel Zeit, um es zu verarbeiten. Ist es möglich, den Zeitaufwand für die Optimierung der obigen Abfrage zu reduzieren?Abfrage benötigt viel Zeit, um einen einzelnen Zeilenbefehl zu verarbeiten.

+1

Sie sollten die durch '|' getrennten Muster in einer Musterfolge kombinieren. Wenn Laufwerk D jedoch viele Dateien enthält, ist Get-ChildItem von Natur aus langsam und Sie können nichts dagegen tun, außer das MFT- oder USN-Journal des Laufwerks direkt zu lesen oder [Everything] (http://www.voidtools.com/) zu verwenden.) die API. – wOxxOm

Antwort

2

Die Include-Erweiterungen schließen implizit die anderen aus,
, so dass der Parameter -Exclude überhaupt nicht verwendet werden muss.

$Extensions = @('*.cfg','*.bat','*.xml','*.properties','*.ini','*.config') 
$ToMatch = 'password=','pass=','passwd=','passphrase=','pwd=','psw=','<‌​password>' 
$Pattern = ($ToMatch | ForEach{[regex]::escape($_)}) -join '|' 
$loc = [environment]::getfolderpath(“userprofile”) 

# -Exclude *.dll,*.log,*.exe,*log*.txt,*.tmp,*.mdb,*.mdf,*.edb,*.dat,*.zip,*.pem,*.ldf 

Get-ChildItem -Path "$Loc\*" -Recurse -Include $Extensions | 
    Select-String -Pattern $Pattern| 
    Select-Object Path, Filename, Pattern, LineNumber, Line 

bearbeiten@TheMadTechnician's Vorschlag enthalten.

+2

Es ist mehr Code, aber eine Sache, die Leuten hilft sicherzustellen, dass sie korrekt entkommen, besteht darin, ein Array von Zeichenketten zu definieren, um sie zu entschlüsseln und dann zu entkommen und sie mit einer Pipe zu verbinden. Zum Beispiel: '$ ToMatch = 'passwort =', 'pass =', 'passwd =', 'passphrase =', 'pwd =', 'psw =', ''; $ Muster = ($ ToMatch | ForEach {[regex] :: escape ($ _)}) -join '' – TheMadTechnician

+0

Danke. werde dies versuchen – user3232560

+0

@TheMadTechnician Nizza Erweiterung, ich werde es in meinem Skript integrieren. – LotPings

Verwandte Themen