2014-04-02 79 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

完美。非常感谢。我以为我在想整个事情! –