2016-07-01 47 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() 
    } 
} 
功能
相關問題