安装 MSI 后无法识别 aws 命令

aws command not getting recognized after MSI install

我是 powershell 的新手。我不明白为什么在成功安装 AWS CLI 后,我间歇性地返回 aws 命令无法识别的错误。我睡着了,想着一些环境变量可能会在后台设置。需要帮助弄清楚我需要做什么才能成功执行 $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.

检查 $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 块中捕获错误。