我正在尝试编辑名为prefs.cfg的配置文件的内容。它有两行:
Server.Name "test"
VoIP.Enabled "1"
我试图更换换弦更加舒服,但我似乎一直在搞乱。
我写了一些东西,如果有人能在我的剧本中指出我出错了,我将不胜感激。
$prefs = Get-Content .\prefs.cfg
$prefs | Select-String "Server.Name"
$servername = Read-Host -Prompt "Enter Server Name"
Write-Host $servername
$prefs -replace $servername
$prefs
答案 0 :(得分:1)
虽然您将$prefs
传递给Select-String
和-replace
,但这些操作的结果并未分配给变量。所以你以后不能使用它们。
正在向-replace
传递一个参数。它预计有两个:要替换什么,以及用什么来替换它。 编辑:如果提供了单个参数,则将其视为“要替换的内容”。由于没有提供“替换它的内容”,它将被替换为任何内容(即删除)
Select-String
和-replace
使用正则表达式。这项任务似乎有点矫枉过正。 Where-Object
和.Replace
完全胜任这项任务。
$prefs = Get-Content .\prefs.cfg
# Get the line using Where. * is wildcard
$oldServerLine = $prefs | Where-object {$_ -like "Server.Name*"}
$servername = Read-Host -Prompt "Enter Server Name"
Write-Host $servername
# Replace old line with new line. ` is the escape character so you get " as expected.
$newPrefs = $prefs.Replace($oldServerLine,"Server.Name `"$servername`"")
$newPrefs