带有AWS的Get-SSMMaintenanceWindowTargets Cmdlet

时间:2019-05-08 13:58:15

标签: amazon-web-services powershell aws-powershell

以下代码

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

某些维护Windows将没有值,因为未向其注册目标(实例)。在这种情况下,数组的成员为null,该函数不起作用。如果我使用直接注册的实例,则可以使用。

如何使循环仅与空成员一起工作。

任何输入都为Thx。

1 个答案:

答案 0 :(得分:1)

我认为问题出在您的for循环中。你有

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

-le 是“小于或等于”的运算符,因此您要经过数组的末尾,这就是我认为要拾取空条目的地方。我认为您需要 -lt 代替

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