[英]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.