You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CLI安装配置后同PowerShell会话无法执行S3下载的解决请求

问题原因

AWS CLI v2的MSI安装包会将C:\Program Files\Amazon\AWSCLIV2\(默认安装路径)添加到系统级PATH环境变量,但当前正在运行的PowerShell会话不会自动加载更新后的PATH。这就是为什么新会话能识别aws命令,但当前脚本会话中找不到的原因。

解决方案

有两种直接可行的修复方式,可任选一种:

方式1:在当前会话中手动刷新PATH

修改Ensure-AWSCLIInstalled函数,在安装完成后将AWS CLI的路径注入到当前会话的环境变量中,同时补充自动检测安装路径的逻辑(避免硬编码路径导致的问题):

修改后的Ensure-AWSCLIInstalled函数关键部分:

# 如果是刚安装的AWS CLI,尝试刷新PATH并验证
if ($awsInstalled) {
    # 尝试从注册表读取AWS CLI安装路径(更可靠)
    $awsInstallPath = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Amazon\AWSCLIV2' -Name InstallLocation -ErrorAction SilentlyContinue).InstallLocation
    if (-not $awsInstallPath) {
        # 备选默认路径
        $awsInstallPath = "C:\Program Files\Amazon\AWSCLIV2\"
    }

    # 检查路径是否存在,并添加到当前会话的PATH
    if (Test-Path $awsInstallPath) {
        if (-not $env:PATH.Contains($awsInstallPath)) {
            $env:PATH += ";$awsInstallPath"
            Write-Host "已将AWS CLI路径添加到当前会话PATH: $awsInstallPath"
        }
    }

    # 再次验证当前会话是否能找到aws命令
    if (-not (Get-Command aws -ErrorAction SilentlyContinue)) {
        Write-Error "AWS CLI安装完成,但当前会话仍无法识别aws命令,请检查安装路径或手动重启PowerShell"
        throw
    } else {
        Write-Host "AWS CLI已在当前会话中可用"
    }
}

方式2:直接调用aws.exe的完整路径

如果不想修改PATH,也可以在Download-SolarWindsInstaller函数中直接指定aws.exe的完整路径来执行命令:

修改后的Download-SolarWindsInstaller函数:

function Download-SolarWindsInstaller {
    Write-Host "Downloading SolarWinds installer from S3 bucket..."
    # 定义aws.exe的完整路径
    $awsExePath = Join-Path (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Amazon\AWSCLIV2' -Name InstallLocation -ErrorAction SilentlyContinue).InstallLocation "aws.exe"
    if (-not (Test-Path $awsExePath)) {
        $awsExePath = "C:\Program Files\Amazon\AWSCLIV2\aws.exe"
    }

    try {
        # 使用完整路径调用aws命令
        $result1 = & $awsExePath s3 cp $S3BucketURL1 $SolarWindsOutput1 --quiet
        if (-not (Test-Path $SolarWindsOutput1)) {
            Write-Error "Failed to download $SolarWindsOutput1. The file does not exist."
            throw "Download failed for $SolarWindsOutput1"
        }

        $result2 = & $awsExePath s3 cp $S3BucketURL2 $SolarWindsOutput2 --quiet
        if (-not (Test-Path $SolarWindsOutput2)) {
            Write-Error "Failed to download $SolarWindsOutput2. The file does not exist."
            throw "Download failed for $SolarWindsOutput2"
        }

        Write-Host "SolarWinds installer files downloaded successfully: $SolarWindsOutput1 and $SolarWindsOutput2"
        
    } catch {
        Write-Error "Failed to download SolarWinds installer from S3. Error: $_"
        throw
    }
}
额外注意事项
  • 确保$DownloadDirectory变量在脚本中已定义(原脚本中$awsInstallerPath = Join-Path $DownloadDirectory "AWSCLIV2.msi",未定义会报错)
  • 运行脚本时需要管理员权限,因为MSI安装需要写入系统注册表和Program Files目录
  • 如果方式1仍无法解决,可尝试在安装完成后用Start-Process启动新的PowerShell会话并执行后续配置和下载步骤,但这种方式需要传递脚本参数或内嵌命令,复杂度稍高

内容的提问来源于stack exchange,提问作者User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:25:56