繁体   English   中英

为什么AWS-ConfigureWindowsUpdate SSM运行命令失败?

[英]Why is AWS-ConfigureWindowsUpdate SSM Run Command Failing?

使用SSM Run命令启用或禁用Windows更新
AWS配置WindowsUpdate

运行命令时,它将使用随机名称在“ C:\\ ProgramData \\ Amazon \\ Ec2Config \\ Downloads \\ aws_psModule \\”下将PowerShell脚本下载到我的EC2。

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

该脚本似乎在第32行中带有.CopyHere函数的错误位置,该文​​件正在解压缩
Powershell脚本的Pastebin: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。
将ConfigureWindowsUpdateWindowsUpdate 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'; 前...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo:未指定:(:) [Write-Error],WriteErrorException
+ FullyQualifiedErrorId:Microsoft.PowerShell.Commands.WriteErrorException,1b3hh3oy.k51.ps1

其他详情:
-我正在运行Windows Server Core 2012 R2的微型EC2
-我已经从AWS控制台成功几次使用AWS-RunPowerShellScript命令
-我通过AWS控制台运行AWS-ConfigureWindowsUpdate,但失败
-我远程连接到服务器,并以管理员权限运行Powershell脚本,并得到相同的错误

您是正确的,在调用Shell命名空间以提取cmdlet有效负载时发生了异常。 Core发行版中未包含用于Shell访问的COM名称空间,因此在提取cmdlet时,ConfigureWindowsUpdate脚本失败。

当前,Windows Server Core AMI提供了一种解决方法,并且正在研究更完整的修复程序。 解决方法是创建带有调整的自定义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()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM