Мои сценарии PS используют список серверов и список имен пользовательских полей журнала. Список серверов и список пользовательских полей журнала являются назначенными переменными. Скрипт проверяет каждый сервер на наличие около 5 имен пользовательских полей. Я использую вложенный ForEach и операторы if для выполнения sh этого Я знаю, что использование вложенного ForEach и оператора if не самый эффективный код. Примечание: каждый сервер может иметь от 1 до любого количества настраиваемых полей журнала, я просто хочу проверить наличие обязательных полей. У меня есть внешний CSV-файл, который содержит эти значения. Поэтому, если мне не нужно l oop через все настраиваемые поля журнала на сервере, это было бы лучше.
$IISServers = Import-Csv C:\srv.csv
$STIG_CustomFields = Import-Csv C:\log_stig.csv
ForEach($IISServer in $IISServers){
$IISServerName = $($IISServer.Host)
try{
invoke-command -ComputerName $IISServerName -ScriptBlock{
$SiteLogFileCustomFields = Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/site/logFile/customFields" -Name 'Collection'
ForEach ($STIG_CustomField in $using:STIG_CustomFields){
ForEach($SiteLogFileCustomField in $SiteLogFileCustomFields){
if($SiteLogFileCustomField.logFieldName -contains $STIG_CustomField.LogFieldName){
write-output "Yes"
}
else{
write-output "No"
}
}
}
}
}
catch{
"Invoke failed"
}
}
Проблема в том, что я не знаю, какой тип переменной $ SiteLogFileCustomFields является. Я думаю, что это коллекция, потому что я могу получить доступ к элементам в ней, используя $ SiteLogFileCustomFields [0] .LogFieldName, но я думаю, что я мог бы сделать что-то вроде if ($ SiteLogFileCustomFields -contains "SomeName"), но это не так работа.
Любые идеи будут с благодарностью.