PowerShell помогает избежать вложенных циклов (повысить эффективность кода) при проверке существования значений в настраиваемых полях журнала IIS8 - PullRequest
0 голосов
/ 06 марта 2020

Мои сценарии 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"), но это не так работа.

Любые идеи будут с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...