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"
下午好,我正在寻找修改首选项文件以使用稍后将由 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"