MSI安装AWS CLI后PowerShell偶发无法识别aws命令,求自动化解决方案
报错根因
MSI安装程序完成AWS CLI V2安装后,只会更新系统级的PATH环境变量,这个修改不会同步到当前正在运行的PowerShell进程中。你添加的sleep逻辑仅能等待安装任务结束,无法刷新当前进程的环境变量缓存,所以后续调用aws命令时仍然找不到执行文件。
修复方案
两种稳定修复方式均满足自动化批量运行要求:
- 方案1:安装完成后主动刷新当前进程的环境变量(改动最小,对后续其他命令也生效)
在安装成功的判断分支中,新增代码刷新PATH即可,修改后的完整脚本如下:
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" # 新增:刷新当前进程的PATH环境变量,合并系统和用户的最新配置 $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") } 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 }
- 方案2:直接调用aws.exe的绝对路径(完全不依赖环境变量,兼容性最强)
AWS CLI V2默认安装路径固定为C:\Program Files\Amazon\AWSCLIV2\aws.exe,直接修改命令调用路径即可,不需要刷新环境变量:
# 把所有aws命令替换为绝对路径 $putItem = '"C:\Program Files\Amazon\AWSCLIV2\aws.exe" dynamodb put-item --table-name ' + $instanceStatusDDBTable + ' --item "{\"HostName\" : {\"S\" : \"' + $instanceName + '\"}, \"Modules\" : {\"M\" : {}}, \"DAGName\" : {\"S\" : \"' + $dagName +'\"}}"'
内容的提问来源于stack exchange,提问作者Shubham Pandey
相关产品推荐
相关产品推荐

