2017-07-11 25 views
-1

私はprefs.cfgという設定ファイルの内容を編集しようとしています。それは2行あります:Powershell - ファイル内の文字列を置き換えます

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 

答えて

1
  • あなたはSelect-String-replace$prefsを渡しているが、これらの操作の結果を変数に代入されていません。だから後で使うことはできません。

  • -replaceに1つの引数が渡されます。それは、交換するものと交換するものの2つを想定しています。 編集:単一の引数が指定されている場合、これは「置き換えるもの」と見なされます。 「置き換えるもの」は指定されていないため、何も置き換えられません(削除されます)。

  • 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 

Related: difference between -replace and .Replace

+0

ああImはスクリプトの中で、今、私の間違いを犯している私は実際に私もいくつかのより多くの、この場合は、オブジェクトにことになるだろう、参照は、ちょうどあなたに – ETHER

+0

に感謝します分かりやすくするために、 '-replace'に第2引数がない場合、has:nothingと置き換えられます。これはパターンを削除するのに有効です。 – LotPings

+0

@LotPingsありがとう、答えに追加されました。 – gms0ulman

関連する問題