Powershell 使用正则表达式替换文件

Powershell replace in file using regex

下午好,我正在寻找修改首选项文件以使用稍后将由 gpo 部署的 powershell 脚本重置默认放大 chrome。

策略是删除负责默认缩放的部分设置。手工完成时效果非常好。但是,使用此脚本时,我收到一条消息,指出首选项文件有误。

代码:

#Déclarations
$preferencePath = Join-Path $env:USERPROFILE                      'AppData\Local\Google\Chrome\User Data\Default\Preferences'
$newPreferencePath = Join-Path $env:USERPROFILE   'AppData\Local\Google\Chrome\User Data\Default\newpref.txt'
$regex = '("default_zoom_level":)[^\s]\d*.\d*(":)\d*.\d*(},)'

#Créer la version corrigé du fichier de préférence
Get-Content -path $preferencePath | % { $_ -Replace $regex , '' }  |  Out-    File $newPreferencePath

#Renomme les fichiers pour que le bon soit pris en compte
Rename-Item $preferencePath "PreferencesBAK"
Rename-Item $newPreferencePath "Preferences"

有人可以解释一下这段代码有什么问题吗?

谢谢!

请注意,Out-File 默认使用 UTF-16LE 作为文件编码。您很可能需要将其写成 UTF-8(事先检查文件的编码):

... | Out-File -Encoding UTF8 $newPreferencePath

原来问题出在替换函数上。另外,编码是ASCII。这是感兴趣的人的工作代码:

#Déclarations
$preferencePath = Join-Path $env:USERPROFILE 'AppData\Local\Google\Chrome\User Data\Default\Preferences'
$newPreferencePath = Join-Path $env:USERPROFILE 'AppData\Local\Google\Chrome\User Data\Default\newpref.txt'
$oldPrefFile = Join-Path $env:USERPROFILE 'AppData\Local\Google\Chrome\User Data\Default\PreferencesBAK'
$regex = '("default_zoom_level":)[^\s]\d*.\d*(":)\d*.\d*(},)'

#Créer la version corrigé du fichier de préférence
Get-Content -path $preferencePath | % { $_ -Replace $regex , ' ' } |  Out-File -Encoding ASCII $newPreferencePath

#Renomme les fichiers pour que le bon soit pris en compte
if (Test-Path $oldPrefFile) {
   Remove-Item $oldPrefFile
}
Rename-Item $preferencePath "PreferencesBAK"
Rename-Item $newPreferencePath "Preferences"