Ich habe ein Skript, in dem ich im Grunde eine Suche und Ersetzung auf mehrere Zeichenfolgen des Textes zu tun. Die ersten paar Zeichenfolgen funktionieren, aber wenn ich die Kontoschlüssel verwende, funktionieren sie nicht. Wie kann ich dieses Problem beheben?
Hier ist das Skript:
Get-ChildItem "[FILEPATH]" -recurse |
Foreach-Object {
$c = ($_ | Get-Content)
$c = $c -replace 'abt7d9epp4','w2svuzf54f'
$c = $c -replace 'AccountName=adtestnego','AccountName=zadtestnego'
$c = $c -replace 'AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA=='
[IO.File]::WriteAllText($_.FullName, ($c -join "`r`n"))
}
'-replace' führt eine Regex-Suche durch und Sie haben Sonderzeichen in der letzten Zeile (wie +) Daher können Sie die Nicht-Regex-Ersatzversion wie folgt verwenden:
$c = $c.replace('AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA==')
Wenn Sie V3 haben, können Sie die Vorteile der automatischen Aufzählung, der -Raw-Schalter in Get-Content, und einige der neuen Zeile contiunation Syntax, um es einfach zu diesem, mit dem String .replace() Methode anstelle der -replace Operator:
(Get-ChildItem "[FILEPATH]" -recurse).FullName |
Foreach-Object {
(Get-Content $_ -Raw).
Replace('abt7d9epp4','w2svuzf54f').
Replace('AccountName=adtestnego','AccountName=zadtestnego').
Replace('AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','AccountKey=DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA==') |
Set-Content $_
}
Bei Verwendung der Methode .replace() werden Zeichenketten für das Argument "Ersetzter Text" (und nicht Regex) verwendet, so dass Sie sich nicht um das Escaping von Regex-Metazeichen im Argument "Zu ersetzender Text" kümmern müssen.
In Ihrem Beispiel haben Sie Ihrer Quellzeichenkette AccountKey=
vorangestellt, nicht aber Ihrer Zielzeichenkette.
$c = $c -replace 'AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','AccountKey=DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA=='
Wenn Sie dies nicht in die Zielzeichenkette aufnehmen, wird die resultierende Zeichenkette AccountKey=
entfernen, anstatt sie zu ersetzen. Sie machen dies korrekt mit dem Beispiel AccountName=
, was diese Schlussfolgerung zu bestätigen scheint, da es Ihnen keine Probleme bereitet. Wenn Sie das wirklich vorangestellt haben wollen, kann dies Ihr Problem lösen.