我目前正在研究自动化脚本。此脚本应具有全局计数变量,该变量在再次执行脚本时不会自行重置。因此,我需要一个存储此计数变量的配置文件,并在再次调用它时使用它。此计数变量还取决于ID。因此,每个ID都有一个计数变量。配置文件可以是XML或INI格式。有人能告诉我如何以最简单的方式创建这样的文件以及如何添加ID或获取计数变量?我不认为“csv-import / export”是正确的方法。
我已经尝试过了......
$results = @()
$details = @{
Key1 = $ID
Key2 = $count
Key3 = "sth"
Key4 = "sth"
Key5 = "sth"
}
$results += New-Object PSObject -Property $details
$results | export-csv -Path C:\Users\...\configure.txt -NoTypeInformation
不幸的是,我无法在这里得到任何进一步的结果,因为每次ID更改时它都会覆盖前一个条目,我不知道如何添加其他条目(如果ID已经存在),更新条目(计数变量)并调用此count变量以在Powershell中使用它。
有人有个建议吗?
最好的问候
答案 0 :(得分:0)
您可以使用hash table,Export-CliXml
和Import-CliXml
将ID计数保存并加载到XML文件中:
$xmlFilePath = 'idCounts.xml'
# If the XML file exists, it is loaded
if( Test-Path -Path $xmlFilePath -PathType Leaf )
{
$hashTable = Import-Clixml -Path $xmlFilePath
}
# Else a new hash table is initialized
else
{
$hashTable = @{}
}
# Set the count of ID '001' to 1
$hashTable['001'] = 1
# Increment the count of ID '002'
$hashTable['002'] += 1
# Save the hash table to the XML file
$hashTable | Export-Clixml -Path $xmlFilePath
答案 1 :(得分:0)
感谢您提供的所有建议。最后,我通过以下方式自行管理:
if(!((import-csv "C:\Users\...\Desktop\ini.txt") | where-object {$_.Key1 -eq $ID}))
{
$results = @()
$details = @{
Key 1 = $ID
Key 2 = 1
Key 3 = "something"
Key 4 = "something"
Key 5 = "something"
Key 6 = "something"
}
$results += New-Object PSObject -Property $details
$results | export-csv -Path C:\Users\...\Desktop\ini.txt -append -NoTypeInformation
}
系统首先检查是否存在具有相应ID的条目。如果不是,则创建具有该ID的对象。新创建时,count变量设置为1。该条目通过“导出CSV”附加到文件。
$select = (import-csv "C:\Users\...\Desktop\ini.txt" | where{$_.Key1 -eq $ID})
[int]$global:number = [convert]::ToInt32($select.Key2)
要使用count变量,请导入配置文件。我已将其设置为“全局”,因为它必须在多个函数上运行。
($csv = Import-Csv "C:\Users\...\Desktop\ini.txt") | ForEach {
if ($_.Key1 -eq $ID) {
$_.Key2 = $global:number}
}
$csv | Export-Csv "C:\Users\...\Desktop\ini.txt" -NoTypeInformation
最后,更新count变量并使用“Export CSV”将其传回文件。
尽管如此,感谢所有有趣的建议!
最好的问候