2016-12-14 21 views
1

複数のコンピュータ間で.INIファイルを更新し、内容を変更する必要があります。.INIファイルの内容を置換または追加します。

(Get-Content SDA_Apps.ini) | Foreach-Object { 
$_ -replace "UserName=.+", "UserName=Test" ` 
    -replace "UserEmail=.+", "[email protected]" ` 
    -replace "UserNo=.+", "UserNo=1234" ` 
    -replace "UserKey=.+", "UserKey=^%&$*$778-" ` 
    -replace "KEM=.+", "KEM=H10" 
} | Set-Content SDA_Apps.ini 

時々テキストのこれらの行が存在しないと私はにテキストを追加する代わりに、それを交換する必要があります:私は作品次のスクリプトを持っています。

これは、これを行うには私の試みである - 成功せず:

function setConfig($file, $key1, $value1, $key2, $value2) { 
    $content = Get-Content $file 
    if ($content -match "^$key\s*=") { 
     $content $_ -replace "^$key1\s*=.*", "$key1=$value1" -replace "^$key2\s*=.*", "$key2=$value2"| 
     Set-Content $file  
    } else { 
     Add-Content $file "$key1 = $value1" 
     Add-Content $file "$key2 = $value2" 
    } 
} 

setConfig "SDA_Apps.ini" "UserName" "Test" "UserEmail" "[email protected]" 

答えて

1

私はあなたの関数を書き直し、それがactualy Set-OrAddIniValueを何反映するために、それを名前を変更:

function Set-OrAddIniValue 
{ 
    Param(
     [string]$FilePath, 
     [hashtable]$keyValueList 
    ) 

    $content = Get-Content $FilePath 

    $keyValueList.GetEnumerator() | ForEach-Object { 
     if ($content -match "^$($_.Key)=") 
     { 
      $content= $content -replace "^$($_.Key)=(.*)", "$($_.Key)=$($_.Value)" 
     } 
     else 
     { 
      $content += "$($_.Key)=$($_.Value)" 
     } 
    } 

    $content | Set-Content $FilePath 
} 

この機能の利点がありますキー値リストをハッシュテーブルとして渡すことができます。 iniファイルを一度だけ読み込み、内容を更新して保存します。使用例を以下に示します。

Set-OrAddIniValue -FilePath "c:\yourinipath.ini" -keyValueList @{ 
    UserName = "myName" 
    UserEmail = "myEmail" 
    UserNewField = "SeemsToWork" 
} 
+1

マーティンは完璧に動作します。 – Ankh2054

関連する問題