使用WinSCP .NET PowerShell脚本上传S3失败:需指定目标存储桶
解决WinSCP PowerShell脚本上传AWS S3时的目标存储桶指定问题
日志中的Specify target bucket错误明确说明:你的脚本未正确指定目标S3存储桶。当前的PutFiles调用仅指定了文件名,没有关联到具体的存储桶,导致WinSCP无法确定上传目标位置。
两种正确指定存储桶的方式
方式1:在SessionOptions中预定义存储桶
直接在会话配置中添加S3BucketName属性,后续上传路径只需指定桶内的文件/目录路径:
# Set up session options $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::S3 HostName = "XXX.s3.amazonaws.com" UserName = "AAAA" Password = "BBB" S3BucketName = "your-target-bucket-name" # 新增:指定目标存储桶名称 } $session = New-Object WinSCP.Session try { $session.SessionLogPath = "C:\Temp\Training DB\log.txt" $session.Open($sessionOptions) # 上传文件到存储桶根目录,相对路径即可 $transferResult = $session.PutFiles("C:\path\Training_Employees.csv", "./Training_Employees.csv") # 显式检查上传错误 $transferResult.Check() } finally { $session.Dispose() }
方式2:在PutFiles目标路径中直接包含存储桶
如果不想在会话配置中固定存储桶,可以在目标路径开头加上存储桶名称(使用绝对路径格式,以/开头):
# 其他会话配置保持不变 $session.PutFiles("C:\path\Training_Employees.csv", "/your-target-bucket-name/Training_Employees.csv")
额外注意事项
- 确认存储桶名称拼写完全正确,且你的AWS账号拥有该桶的
s3:PutObject权限 - 若使用区域专属存储桶,HostName需对应正确的区域端点(例如
your-bucket.s3.us-east-1.amazonaws.com)
内容的提问来源于stack exchange,提问作者Jason Webber
相关产品推荐
相关产品推荐

