【问题标题】:aws command not getting recognized after MSI install安装 MSI 后 aws 命令未得到识别
【发布时间】:2021-11-21 00:33:45
【问题描述】:

我是这里的 powershell 新手。我不知道为什么在成功安装 AWS CLI 后,我会间歇性地返回 aws command not Recognized 错误。我进入睡眠状态,认为一些环境变量可能会在后台设置。需要帮助弄清楚我需要在这里做什么才能成功执行 $putItem 命令。

我按照这里的说明https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html

请注意:整个过程必须自动化,因此我无法手动登录主机并修复某些问题,因为同一脚本必须在 100 多个主机上运行

Write-Output "Checking if AWS CLI support exists..."
cmd.exe /c "aws --version"
if ($LASTEXITCODE -eq 0){
    Write-Output "AWS CLI installed already"
} else {
    Write-Output "Installing AWS CLI V2"
    cmd.exe /c "msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi /qn"
    if ($LASTEXITCODE -eq 0){
        Write-Output "AWS CLI installed successfully"
        Start-Sleep -s 5
    } else {
        Write-Output "Could not install AWS CLI"
        exit 1
    }
}
$putItem = 'aws dynamodb put-item --table-name  ' + $instanceStatusDDBTable + ' --item "{\"HostName\" : {\"S\" : \"' + $instanceName + '\"},  \"Modules\" : {\"M\" : {}},  \"DAGName\" : {\"S\" : \"' + $dagName +'\"}}"'

Write-Output "Executing DB put item query $putItem"
cmd.exe /c $putItem
if ($LASTEXITCODE -eq 0){
  Write-Output "Created entry for $instanceName in $instanceStatusDDBTable DDB table"
} else {
  Write-Output "Could not complete put Item operation for $instanceName"
  exit 1
}

这是输出

Checking if AWS CLI support exists...

Installing AWS CLI V2

AWS CLI installed successfully

Executing DB put item query aws dynamodb put-item --table-name Ex2019-HostStatusTable --item "{\"HostName\" : {\"S\" : \"Host1\"}, \"Modules\" : {\"M\" : {}}, \"DAGName\" : {\"S\" : \"USW-D01\"}}"

Could not complete put Item operation for Host1

错误输出 -

'aws' is not recognized as an internal or external command,

operable program or batch file.

【问题讨论】:

  • 这里有很多话要说。首先,您可以通过 Get-Command cmdlet 检查是否安装了 aws。那么,为什么要通过 cmd.exe 调用 aws CLI?您可以直接在 PowerShell 中执行此操作。另外,为什么不安装 AWS PowerShell 模块呢?最后,您在运行脚本时使用哪些 AWS 凭证?
  • AWS Dynamo DB 设置/查询数据 API 不适用于 Powershell github.com/aws/aws-tools-for-powershell/issues/41 因此,使用 cmd.exe。我使用 SSM 托管实例,此脚本在 SSM 自动化文档中作为运行命令执行

标签: amazon-web-services powershell cmd


【解决方案1】:

检查 $LASTEXITCODE 变量后,尝试添加以下代码以刷新环境变量。 shell 会话必须重新收集安装程序刚刚添加的更新的环境变量。有关更多信息,请参阅此回复info

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

您可能还需要考虑使用带有-wait-passthru 参数的Start-Process 来调用您的安装程序,因为 cmd 可能不会等待足够长的时间让应用程序完成安装。你可以阅读here。我同意 David,您可以通过运行 aws --version 然后读取版本号或在 try catch 块中捕获错误来检查它是否已安装。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 2018-08-12
    • 2020-12-16
    • 2016-02-28
    • 2018-01-01
    • 1970-01-01
    • 2011-06-03
    • 2019-01-03
    相关资源
    最近更新 更多