2016-07-01 45 views
0

Enabling or Disabling Windows Updates with SSM Run Command
AWS-ConfigureWindowsUpdate为什么AWS-ConfigureWindowsUpdate SSM运行命令失败?

当运行命令,它的下载PowerShell脚本到我的EC2在 “C:\ ProgramData \亚马逊\ Ec2Config \下载\ aws_psModule \” 以任意名称

当PowerShell脚本执行,它将“Amazon.ConfigureWindowsUpdate-1.2.zip”下载到“%Temp%”,然后将其解压缩到“%WinDir%\ System32 \ WindowsPowerShell \ v1.0 \ Modules”

该脚本看起来像在第32行使用.CopyHere函数在解压缩时失败
Pastebin of Powershell Script: 1b3hh3oy.k51.ps1

(New-Object -Com Shell.Application).namespace($powerShellModuleLocation).CopyHere((New-Object -Com Shell.Application).namespace($tempLocation).Items(), 16) 

输出:

从实例元数据获取实例区域。
从S3下载ConfigureWindowsUpdate PowerShell模块。
验证ConfigureWindowsUpdate PowerShell模块zip文件的SHA 256。
ExtractingConfigureWindowsUpdate zip文件内容到Windows PowerShell模块文件夹。
--------------错误-------------- C:\ ProgramData \ Amazon \ Ec2Config \ Downloads \ aws_psModule \ 1b3hh3oy.k51.ps1:
下载时出现异常ConfigureWindowsUpdate 带有消息的PowerShell模块:调用的目标引发了异常。
在线:1 char:1 +。 ' C:\ ProgramData \ Amazon \ Ec2Config \ Downloads \ aws_psModule \ 1b3hh3oy.k51.ps1 '; ex ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 +分类信息: + FullyQualifiedErrorId:Microsoft.PowerShell.Commands.WriteErrorException,1b3hh3oy.k51.ps1

其他信息:
- 我有运行
的Windows Server 2012核心R2的微型EC2 - 我已经成功地使用AWS-RunPowerShellScript命令几次从AWS控制台
- 我通过AWS控制台运行AWS-ConfigureWindowsUpdate并且它fa ils
- 我远程连接到服务器并使用管理员权限运行powershell脚本并获得相同的错误

回答

2

您是对的,在调出Shell命名空间以提取cmdlet有效内容时发生异常。 Core访问的COM命名空间不包含在Core发行版中,因此在提取此cmdlet时ConfigureWindowsUpdate脚本失败。

当前有一种可用于Windows Server Core AMI的解决方法,目前正在研究一个更完整的修复程序。解决方法包括创建一个custom ConfigureWindowsUpdate文档并进行调整以修复提取过程。

下面是将取代调用

(New-Object -Com Shell.Application).namespace($powerShellModuleLocation).CopyHere((New-Object -Com Shell.Application).namespace($tempLocation).Items(), 16)

function ExtractZipCoreOs($zipFilePath, $destPath) { 
    try 
    { 
     [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null 

     $zip = [System.IO.Compression.ZipFile]::OpenRead($zipFilePath) 

     foreach ($item in $zip.Entries) { 
      $extractedPath = Join-Path $destPath $item.FullName 

      if ($item.Length -eq 0) { 
       if ((Test-Path $extractedPath) -eq 0) { 
        mkdir $extractedPath | Out-Null 
       } 
      } else { 
       $fileParent = Split-Path $extractedPath 

       if ((Test-Path $fileParent) -eq 0) { 
        mkdir $fileParent | Out-Null 
       } 

       [System.IO.Compression.ZipFileExtensions]::ExtractToFile($item,(Join-Path -Path $powerShellModuleLocation -ChildPath $item.FullName), $true) 
      } 
     } 
    } 
    catch 
    { 
     throw "Error encountered when extracting ConfigureWindowsUpdate zip file.`n$($_.Exception.Message)" 
    } 
    finally 
    { 
     $zip.Dispose() 
    } 
} 
功能
相关问题