Командлет Get-SSMMaintenanceWindowTargets с AWS - PullRequest
1 голос
/ 08 мая 2019

следующий код

function Get-SSMMaintenanceWindowMatch ($instance) {
  $mws = (Get-SSMMaintenanceWindowList -Region eu-central-1).WindowId
  for ($i=0; $i -le $mws.Length; $i++)  {
        $val = ((Get-SSMMaintenanceWindowTargets -region eu-central-1 -WindowId $mws[$i]).Targets).Values
        if (($val -eq $instance) -and ($val -eq $null)) {
        return $instance
        else {
        return -1
             }

      }
   }
}

выдает следующую ошибку.

PS C:\WINDOWS\system32> Get-SSMMaintenanceWindowMatch $instanceId
Get-SSMMaintenanceWindowTargets : 1 validation error detected: Value null at 'windowId' failed to satisfy constraint: Member must not be 
null
At line:4 char:18
+ ...    $val = ((Get-SSMMaintenanceWindowTargets -region eu-central-1 -Win ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...owTargetsCmdlet:GetSSMMaintenanceWindowTargetsCmdlet) [Get-SSMMaintenan 
   ceWindowTargets], InvalidOperationException
    + FullyQualifiedErrorId : Amazon.SimpleSystemsManagement.AmazonSimpleSystemsManagementException,Amazon.PowerShell.Cmdlets.SSM.GetSSMMa 
   intenanceWindowTargetsCmdlet

Некоторые окна обслуживания не имеют значения, так как для них не зарегистрированы цели (экземпляры).В этот момент член массива является нулевым, и функция не работает.Если я использую экземпляр, который зарегистрирован непосредственно, он работает.

Как мне заставить цикл работать только с нулевыми элементами.

Thx для любого ввода.

1 Ответ

1 голос
/ 09 мая 2019

Я думаю, что проблема заключается в вашем цикле for. У вас есть

 for ($i=0; $i -le $mws.Length; $i++)

-le - это оператор для «меньше или равно», поэтому вы идете за конец массива, и я думаю, что вы выбираете пустую запись. Я думаю, что вам нужно -lt вместо:

 for ($i=0; $i -lt $mws.Length; $i++)
...