aws s3命令在由Windows任务调度程序触发的batch file中不起作用

我有一个batch fileC:\ upload_to_s3.bat。 在这个文件中,有一行:

aws s3 sync D:\ S3 \ batch1 \ s3:// MyBucket / batch1 –exclude * .bat

我有Windows任务调度程序“S3小时同步”,每小时运行一次,以触发运行C:\ upload_to_s3.bat。 但是这个命令并没有做任何事情 – file upload从未发生过。

如果我双击C:\ upload_to_s3.bat,它会运行得很好。

这是Windows 2008 Standard服务器。 我已经安装了AWS CLI,并使用命令“aws configure”进行configuration,并input了我的访问密钥和密钥。 这就是为什么它运行,如果我双击batch file。

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

那么为什么在任务调度程序触发时,“aws s3 sync”命令不起作用呢?

我需要在“aws s3 sync”之前添加一行来设置凭证吗? 如果是这样,怎么样?

谢谢!

我可以通过在你的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_ACCESS_KEY_ID”和密钥之间没有等号。

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

set AWS_ACCESS_KEY_ID=your_access_key_id

set AWS_SECRET_ACCESS_KEY=your_secret_access_key

AWS文档

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

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

所以解决的办法是在脚本中加入类似的东西(BAT或者PowerShell)

 :: in a BAT script set userprofile=C:\Users\%username% # in a PowerShell $env:USERPROFILE = "c:\users\$env:USERNAME" 

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

我在拖延试图弄清楚为什么这件事发生在我们身上之后才发现这一点。

 set AWS_DEFAULT_PROFILE=namedprofile set AWS_CONFIG_FILE=C:\Users\xxxx\.aws\config 

直到我在脚本中添加上面的AWS_CONFIG_FILE行,才能够看到配置文件! 但是现在找不到凭证 ,而且我也没有看到如何设置。

这是我不知道配置文件在哪里的错误:

 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 

然后这是设置AWS_CONFIG_FILE变量后出现的错误:

 Unable to locate credentials Completed 1 part(s) with ... file(s) remaining 

在Windows蝙蝠文件是什么作品是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