Saya memiliki skrip di mana saya pada dasarnya melakukan pencarian dan penggantian pada beberapa string teks. Beberapa string pertama berfungsi, tetapi ketika saya melakukan kunci akun, mereka tidak berfungsi. Bagaimana saya bisa memperbaiki masalah ini?
Berikut adalah skripnya:
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' melakukan pencarian regex dan Anda memiliki karakter khusus di karakter terakhir (seperti +) Jadi Anda bisa menggunakan versi non-regex replace seperti ini:
$c = $c.replace('AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA==')
Jika Anda memiliki V3, Anda dapat memanfaatkan penghitungan otomatis, saklar -Raw di Get-Content, dan beberapa sintaksis kontiunasi baris baru untuk menyederhanakannya, dengan menggunakan metode string .replace() sebagai pengganti operator -replace:
(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 $_
}
Menggunakan metode .replace() menggunakan string literal untuk argumen teks yang diganti (bukan regex), jadi Anda tidak perlu khawatir tentang escaping metacharacters regex dalam argumen teks yang akan diganti.
Dalam contoh Anda, Anda menambahkan string sumber Anda dengan AccountKey=
tetapi bukan string target Anda.
$c = $c -replace 'AccountKey=eKkij32jGEIYIEqAR5RjkKgf4OTiMO6SAyF68HsR/Zd/KXoKvSdjlUiiWyVV2+OUFOrVsd7jrzhldJPmfBBpQA==','AccountKey=DdOegAhDmLdsou6Ms6nPtP37bdw6EcXucuT47lf9kfClA6PjGTe3CfN+WVBJNWzqcQpWtZf10tgFhKrnN48lXA=='
Dengan tidak memasukkannya ke dalam string target, string yang dihasilkan akan menghapus AccountKey=
dan bukannya menggantinya. Anda melakukan ini dengan benar dengan contoh AccountName=
, yang tampaknya mendukung kesimpulan ini karena tidak memberi Anda masalah. Jika Anda benar-benar bermaksud untuk menambahkannya, maka ini dapat menyelesaikan masalah Anda.