嘗試修改不同的檔案并獲得兩種不同的結果。成功的檔案“autoexec.cfg 作業正常。這是檔案內容和 powershell 代碼。c:\temp\autoexec.cfg 包含:
disable_write_track = true
webgui_port = 8470
修改檔案的powershell代碼:
$WGP = get-random -minimum 8000 -maximum 8999
$line = Get-Content "C:\temp\autoexec.cfg" | Select-String webgui_port | Select-Object -ExpandProperty Line
$content = Get-Content "C:\temp\autoexec.cfg"
$content | ForEach-Object {$_ -replace $line,"webgui_port = $WGP"} | Set-Content "C:\temp\autoexec.cfg"
失敗的檔案是這樣設定的。c:\temp\serverSettings.lua 包含:
cfg =
{
["port"] = 10302,
} -- end of cfg
修改檔案的powershell代碼
$DCSP = get-random -minimum 10000 -maximum 19999
$line = Get-Content "C:\temp\serverSettings.lua" | Select-String port | Select-Object -ExpandProperty Line
$content = Get-Content "C:\temp\serverSettings.lua"
$content | ForEach-Object {$_ -replace $line," [\`"port\`"] = $DCSP,"} | Set-Content "C:\temp\serverSettings.lua"
該檔案不會改變,除非它改變了。我在 Notepad 中打開了檔案,在運行代碼 Notepad 后,看到檔案已更改并想要重新加載,但沒有任何更改。
uj5u.com熱心網友回復:
-replace是一個正則運算式運算子,[]是正則運算式中的特殊構造,需要正確轉義。
最簡單的方法是使用[regex]::Escape():
$content | ForEach-Object {$_ -replace [regex]::Escape($line)," [\`"port\`"] = $DCSP,"} | Set-Content "C:\temp\serverSettings.lua"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444152.html
