如何使用 PowerShell 替换多个字符串

far*_*rag 4 powershell

我想用另外 4 个字符串替换 4 个字符串并将它们写入文件。

$file = 'C:\Defender.psd1'
(Get-Content $file) | ForEach-Object {
    $_.replace("'MSFT_MpSignature.cdxml',", "'MSFT_MpSignature.cdxml')")
    $_.replace("'MSFT_MpWDOScan.cdxml')", "")
    $_.replace("'Remove-MpThreat',", "'Remove-MpThreat')")
    $_.replace("'Start-MpWDOScan')", "") `
} | Out-File $file
Run Code Online (Sandbox Code Playgroud)

但文件中的每个字符串都被重复了 4 次。脚本将用于 PowerShell 4 和 5.1。

Mar*_*ndl 5

那是因为您将当前的 foreach 对象放入管道四次。相反,执行一次并多次调用替换:

$file = 'C:\Defender.psd1'
(Get-Content $file) | ForEach-Object {
    $_.replace("'MSFT_MpSignature.cdxml',", "'MSFT_MpSignature.cdxml')").replace("'MSFT_MpWDOScan.cdxml')", "").replace("'Remove-MpThreat',", "'Remove-MpThreat')").replace("'Start-MpWDOScan')", "") `
} | Out-File $file
Run Code Online (Sandbox Code Playgroud)

这是一个更具可读性的版本:

$file = 'C:\Defender.psd1'

(Get-Content $file) | ForEach-Object {
    $_.replace("'MSFT_MpSignature.cdxml',", "'MSFT_MpSignature.cdxml')").
    replace("'MSFT_MpWDOScan.cdxml')", "").
    replace("'Remove-MpThreat',", "'Remove-MpThreat')").
    replace("'Start-MpWDOScan')", "") 
} | Out-File $file
Run Code Online (Sandbox Code Playgroud)