aws s3命令在Windows任务计划程序触发的批处理文件中不起作用

aws s3命令在Windows任务计划程序触发的批处理文件中不起作用,windows,batch-file,amazon-web-services,amazon-s3,Windows,Batch File,Amazon Web Services,Amazon S3,我有一个批处理文件C:\upload\u to\u s3.bat。在此文件中,有一行: aws s3同步D:\s3\batch1\s3://MyBucket/batch1--exclude*.bat 我有Windows任务计划程序“S3小时同步”,它每小时运行一次,以触发运行C:\upload\u to\u S3.bat。但是这个命令没有任何作用-文件上传从未发生过 如果我双击C:\upload\u to\u s3.bat,它运行得非常好 这是Windows 2008标准服务器。我已经安装了AW

我有一个批处理文件C:\upload\u to\u s3.bat。在此文件中,有一行:

aws s3同步D:\s3\batch1\s3://MyBucket/batch1--exclude*.bat

我有Windows任务计划程序“S3小时同步”,它每小时运行一次,以触发运行C:\upload\u to\u S3.bat。但是这个命令没有任何作用-文件上传从未发生过

如果我双击C:\upload\u to\u s3.bat,它运行得非常好

这是Windows 2008标准服务器。我已经安装了AWS CLI,并使用命令“AWS configure”进行了配置,并输入了我的访问密钥和密钥。这就是为什么双击批处理文件时它会运行

Windows任务计划程序以“[MyServer]/Administrator”帐户运行

那么,为什么“aws s3 sync”命令在被任务调度器触发时不能工作呢

我是否需要在“aws s3同步”之前添加一行以首先设置凭据?如果是,怎么做


谢谢大家!

在批处理文件中包括以下行:

设置AWS访问密钥ID=您的访问密钥ID

set AWS\u SECRET\u ACCESS\u KEY=您的\u SECRET\u ACCESS\u KEY


我可以通过在批处理文件中的s3命令之前添加以下3行来解决这个问题

aws configure set AWS_ACCESS_KEY_ID <your acess key id>
aws configure set AWS_SECRET_ACCESS_KEY <your secret access key here>
aws configure set default.region eu-west-1
aws配置设置aws\u访问\u密钥\u ID
aws配置设置aws\u密码\u访问\u密钥
aws配置设置默认值。区域eu-west-1

用数据替换尖括号之间的内容,用桶的区域替换区域。是的,“AWS\u ACCESS\u KEY\u ID”和密钥之间没有等号。

发生这种情况的原因是,AWS命令没有找到配置文件或凭据文件!Win2012也是如此

问题是Windows任务计划将%USERPROFILE%设置为C:\Users\Default,而不是任务运行时所使用的实际用户???AWS正在使用它来查找配置文件和凭据文件

因此,解决方法是在脚本中添加类似的内容(BAT或PowerShell)

从计划任务运行时,即使%homepath%变量也是空的

我是在拖延时间试图弄明白为什么我们会这样之后才发现这一点的

set AWS_DEFAULT_PROFILE=namedprofile
set AWS_CONFIG_FILE=C:\Users\xxxx\.aws\config
直到我在脚本中添加了上面的AWS_CONFIG_文件行,AWS才能够真正看到配置文件!但是现在它找不到凭证,我也不知道如何设置

这是我在不知道配置文件在哪里的情况下得到的错误:

Traceback (most recent call last):
  File "aws", line 27, in <module>
  File "aws", line 23, in main
  File "awscli\clidriver.pyc", line 50, in main
  File "awscli\clidriver.pyc", line 176, in main
  File "awscli\clidriver.pyc", line 157, in _create_parser
  File "awscli\clidriver.pyc", line 91, in _get_command_table
  File "awscli\clidriver.pyc", line 111, in _build_command_table
  File "botocore\session.pyc", line 680, in emit
  File "botocore\hooks.pyc", line 226, in emit
  File "botocore\hooks.pyc", line 209, in _emit
  File "awscli\customizations\preview.pyc", line 71, in mark_as_preview
  File "awscli\clidriver.pyc", line 349, in service_model
  File "awscli\clidriver.pyc", line 366, in _get_service_model
  File "botocore\session.pyc", line 256, in get_config_variable
  File "botocore\session.pyc", line 277, in _found_in_config_file
  File "botocore\session.pyc", line 349, in get_scoped_config
botocore.exceptions.ProfileNotFound: The config profile (backup) could not be found

在windows bat文件中,有效的是user2415376和docesam应答的组合

这是:

set userprofile=C:\Users\%username%
aws configure set AWS_ACCESS_KEY_ID <your_key>
aws configure set AWS_SECRET_ACCESS_KEY <your_secret>
aws configure set default.region <your_region>

other aws commands here
set userprofile=C:\Users\%username%
aws配置设置aws\u访问\u密钥\u ID
aws配置设置aws\u密码\u访问\u密钥
aws配置设置默认值.region
这里有其他aws命令

运行aws配置时,您是否以[MyServer]\Administrator]身份登录?
aws configure
命令记录在
~/.aws/config
中使用配置文件(在Windows上,我相信这会映射到“%USERPROFILE%\.aws\config”)。批处理文件用户是否存在该文件?是的,我以管理员身份登录,可以看到文件C:\Users\Administrator\.aws\config。还有其他想法吗?请随意提问-其中一个可能会闪闪发光。批处理文件是否有任何输出?如果没有,能否将输出捕获到文件中?您可以运行另一个命令,可能是列出S3中的一个文件,您可以运行该命令来安全地检查权限情况。我将新行修改为“aws S3 sync D:\S3\batch1\S3://MyBucket/batch1--exclude*.bat>D:\logs\S3.txt”输出文件为空-实际上甚至没有创建输出文件。这行之前和之后的命令都已执行-这意味着任务调度器工作正常。“aws s3”线是唯一的问题。更多想法?也许用户帐户控制阻止了本地文件访问?我建议尝试将本地问题与AWS问题分开,我会尝试通过在批处理文件中添加两行额外的行来捕获文本输出-1)
键入“%USERPROFILE%\.AWS\config”
以确保批处理文件可以读取凭据,和2)
aws s3 ls
作为一个最小的命令,使用aws creds而不做任何事情。两者都应该生成输出,不管是否出错。我给了你+1,但后来我注意到这是一种linux方法。它对Windows不起作用啊!!我想出来了。。。(编辑..嗯..当我按enter键时,编辑会保存注释?)有人给这个人买了一杯酒谢谢你弄明白了这一点-为我节省了很多时间!如果按照AWS CLI文档进行设置,则不需要此选项。CMD提示符:
aws configure
在用户运行任务计划程序(通常为“管理员”)时,它应自动创建
c:\users\Administrator\.aws\config
c:\users\Administrator\.aws\credentials
文件。你准备好了。注意:您也可以设置不同的配置文件。()这应该避免,因为它将直接在脚本中显示AWS凭据。使用通过aws configure创建的共享凭证文件是一种更好的方法
Unable to locate credentials
Completed 1 part(s) with ... file(s) remaining
set userprofile=C:\Users\%username%
aws configure set AWS_ACCESS_KEY_ID <your_key>
aws configure set AWS_SECRET_ACCESS_KEY <your_secret>
aws configure set default.region <your_region>

other aws commands here