Windows计划任务执行PowerShell上传S3文件时忽略用户配置导致传输速度异常
Windows计划任务执行PowerShell上传S3文件时忽略用户配置导致传输速度异常
这种情况我之前排查过好几次,核心问题基本都是Windows计划任务的运行环境和你手动登录时不一样,导致PowerShell没读到你存在C:\Users\<username>\.aws\config里的高并发/带宽配置, fallback到了默认的低参数设置,所以速度差这么多。
具体原因分析
- 如果你设置了计划任务「不管用户是否登录都要运行」,它会以系统上下文加载环境,这时候
USERPROFILE等用户级环境变量可能没正确加载,PowerShell找不到你用户目录下的.aws配置文件夹,只能用默认的S3传输参数(默认并发数和带宽都很低)。 - 就算选了「用户登录时运行」,有时候计划任务的工作目录不是你的用户主目录,PowerShell查找
.aws文件夹时会去错误的路径(比如系统盘的默认目录),同样读不到自定义配置。
解决方案
这里给你几个靠谱的解决办法,按优先级来:
1. 在脚本里强制指定AWS配置文件路径
最直接的方法,不管环境怎么变,让脚本明确读取你指定的配置文件。修改你的PowerShell脚本:
# 强制指定AWS配置文件的位置 $env:AWS_CONFIG_FILE = "C:\Users\<你的用户名>\.aws\config" # 后续的原脚本内容不变 Set-AWSCredential -ProfileName BackupProfile Write-S3Object -BucketName xyausdpaisd-bkt -Region ap-south-1 -File $latest.FullName
这样就能确保脚本用的是你自定义的高并发/带宽配置。
2. 调整计划任务的运行选项
- 如果不需要在用户未登录时执行任务,把计划任务的「安全选项」改成只在用户登录时运行。这种模式下,计划任务会加载你用户的完整环境变量,PowerShell能自动找到
C:\Users\<username>\.aws目录,读取你的配置。 - 要是必须在未登录时运行,除了上面指定配置文件的方法,还可以在计划任务的「操作」设置里,把「起始于(可选)」设置为你的用户主目录(比如
C:\Users\<你的用户名>),让PowerShell从这个目录开始查找.aws文件夹。
3. 加调试日志验证配置是否生效
可以在脚本里加一行输出当前加载的AWS配置,方便排查问题:
# 输出当前BackupProfile的配置到日志文件 Get-AWSConfig -ProfileName BackupProfile | Out-File "C:\temp\aws_s3_debug.log"
运行计划任务后,打开这个日志文件,检查max_concurrent_requests和max_bandwidth是不是你设置的300和5000MB/s。如果不是,说明配置还是没加载对,再回头检查路径或计划任务设置。
备注:内容来源于stack exchange,提问作者user2629636
相关产品推荐
相关产品推荐

