我想删除我的INI文件中的特定项目。 我的INI文件
[Information]
Name= Joyce
Class=Elementry
Age=10
我要删除Age=10
我尝试了这段代码,但是我只能删除Age
的值10
。
Param(
[parameter(mandatory=$true)]$FilePath,
[parameter(mandatory=$true)] $a,
[parameter(mandatory=$true)] $b,
[parameter(mandatory=$true)] $c
)
Import-Module PsIni
$ff = Get-IniContent $FilePath
$ff["$a"]["$b"] = "$c"
$ff | Out-IniFile -FilePath $FilePath -Force
我对INI文件的期望输出是:
[Information]
Name=Joyce
Class=Elementry
答案 0 :(得分:1)
Get-IniContent
返回一个(嵌套的)有序哈希表,该表代表INI文件的结构。
要删除条目,因此必须使用有序哈希表的.Remove()
方法:
# Read the INI file into a (nested) ordered hashtable.
$iniContent = Get-IniContent file.ini
# Remove the [Information] section's 'Age' entry.
$iniContent.Information.Remove('Age')
# Save the updated INI representation back to disk.
$iniContent | Out-File -Force file.ini
因此,您可以按以下方式修改脚本:
Param(
[parameter(mandatory=$true)] $FilePath,
[parameter(mandatory=$true)] $Section,
[parameter(mandatory=$true)] $EntryKey,
$EntryValue # optional: if omitted, remove the entry
)
Import-Module PsIni
$ff = Get-IniContent $FilePath
if ($PSBoundParameters.ContainsKey('EntryValue')) {
$ff.$Section.$EntryKey = $EntryValue
} else {
$ff.$Section.Remove($EntryKey)
}
$ff | Out-IniFile -FilePath $FilePath -Force
然后按以下方式命名:请注意省略了第四个参数,该参数要求删除条目:
.\script.ps1 file.ini Information Age