2014-04-02 113 views
1

我想更改INI文件中的某些值。不幸的是,我有兩個不同部分的鍵,這兩個部分的名稱相同,但需要不同的值。我的代碼使用PsIniGet-IniContent功能。Powershell INI編輯

實例INI文件:

[PosScreen] 
BitmapFile=C:\Temp\Random.bmp 
Bitmap=1 

[ControlScreen] 
BitmapFile=C:\Temp\Random.bmp 
Bitmap=1 

我需要上述更改爲以下幾點:

[PosScreen] 
BitmapFile=C:\Temp\FileC.bmp 
Bitmap=1 

[ControlScreen] 
BitmapFile=C:\Temp\FileD.bmp 
Bitmap=1 

我使用的PowerShell代碼似乎工作,但它的變化的每一個值「文件d」。它明顯地解析了兩次,並且每個部分的名字都是相同的。

$NewFileC = "C:\Temp\FileC.bmp" 
$NewFileD = "C:\Temp\FileD.bmp" 
$POSIniContent = Get-IniContent "C:\scripts\Update-EnablerImage\WINSUITE.INI" 
$BOIniContent = Get-IniContent "C:\scripts\Update-EnablerImage\WINSUITE.INI" 

If ($POSIniContent["PosScreen"]["BitmapFile"] -ne $NewFileC) { 
    Get-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" | 
    ForEach-Object {$_ -replace "BitmapFile=.+" , "BitmapFile=$NewFileC" } | 
    Set-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" 
} 

If ($BOIniContent["ControlScreen"]["BitmapFile"] -ne $NewFileD) { 
    Get-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" | 
    ForEach-Object {$_ -replace "BitmapFile=.+" , "BitmapFile=$NewFileD" } | 
    Set-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" 
} 

我的掙扎是如何獨立地改變每一個。我是一個腳本新手,所以呼籲一些幫助。嘗試使用條件邏輯(例如ForEach $line in $INIFile),但沒有運氣。

回答

6

你正在讓事情變得複雜。你可以這樣使用get-inicontent:

$ini=Get-IniContent c:\temp\ini.ini 
$ini["posscreen"]["BitmapFile"]="C:\Temp\FileC.bmp" 
$ini |out-inifile -FilePath "c:\temp\ini2.ini" 
+1

完美。非常感謝。我以爲我在想整個事情! –