这个Powershell正在编辑

问题描述 投票:4回答:1

我想更改INI文件中的一些值。不幸的是,我有2个不同部分的密钥,它们共享相同的名称但需要不同的值。我的代码使用Get-IniContentPsIni函数。

示例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),但没有运气。

powershell powershell-v2.0
1个回答
11
投票

你太复杂了。你可以使用Get-IniContentOut-IniFile如下:

$ini = Get-IniContent c:\temp\ini.ini 
$ini["posscreen"]["BitmapFile"] = "C:\Temp\FileC.bmp"  
$ini | Out-IniFile -FilePath c:\temp\ini2.ini

请注意,如果要覆盖原始文件,则必须将-Force添加到Out-IniFile调用中。

© www.soinside.com 2019 - 2024. All rights reserved.