Я работаю над сценарием PowerShell, который будет выполнять следующие действия:
- Используйте функцию, чтобы получить данные ini и назначить их хеш-таблице (в основном то, что делает Get-IniContent, но я использую такую, которую нашел на этом сайте).
- Проверьте вложенные ключи (не разделы, а ключи каждого раздела), чтобы узнать, существует ли значение «NoRequest».
- Если раздел содержит ключ NoRequest и ТОЛЬКО ЕСЛИ значение NoRequest равно false, тогда я хочу вернуть имя раздела, ключ NoRequest и значение ключа. Например, что-то вроде «Section [DataStuff] имеет значение NoRequest, установленное в false». Если раздел не содержит ключа NoRequest или для него установлено значение true, его можно пропустить.
Я считаю, что я выполнил первые две части этого, но я не уверен, как перейти к третьему шагу. Вот код, который у меня есть:
function Get-IniFile
{
param(
[parameter(Mandatory = $true)] [string] $filePath
)
$anonymous = "NoSection"
$ini = @{}
switch -regex -file $filePath
{
"^\[(.+)\]$" # Section
{
$section = $matches[1]
$ini[$section] = @{}
$CommentCount = 0
}
"^(;.*)$" # Comment
{
if (!($section))
{
$section = $anonymous
$ini[$section] = @{}
}
$value = $matches[1]
$CommentCount = $CommentCount + 1
$name = "Comment" + $CommentCount
$ini[$section][$name] = $value
}
"(.+?)\s*=\s*(.*)" # Key
{
if (!($section))
{
$section = $anonymous
$ini[$section] = @{}
}
$name,$value = $matches[1..2]
$ini[$section][$name] = $value
}
}
return $ini
}
$iniContents = Get-IniFile C:\testing.ini
foreach ($key in $iniContents.Keys){
if ($iniContents.$key.Contains("NoRequest")){
if ($iniContents.$key.NoRequest -ne "true"){
Write-Output $iniContents.$key.NoRequest
}
}
}
Когда я запускаю приведенный выше код, он дает мне следующий ожидаемый результат, поскольку я знаю, что в INI есть четыре экземпляра NoRequest, и только один из них имеет значение false:
false
Я полагаю, что я решил проблему с поиском правильных значений из файла, но я не уверен, как поступить с правильным выводом, как указано в шаге 3 выше.