在Linux中,以下命令可以很好地工作,其中我们为envrioment变量指定用户名和密码,并在aws-adfs中使用'-env"切换
Linux .sh
export username=<my_username>
export password=<my_pass>
aws-adfs login --region <region> --adfs-host <adfs-host> --role-arn <Role> --env --no-sspi --profile <local-profile-name>
在使用cmd的Windows上,我无法获得"--env";工作。无论我在这里尝试了什么,它都将始终使用我的AD登录用户,而不是我想要使用的第二个帐户的用户/密码。
Windows:
(aws-adfs) C:>set username="my_username"
(aws-adfs) C:>set password="my_password"
aws-adfs login --region <region> --adfs-host <adfs-host> --role-arn <Role> --env --profile <local-profile-name>
Powershell:
$env:username = 'my_username'
$env:password = 'my_password'
dir env:
aws-adfs login --region <region> --adfs-host <adfs-host> --role-arn <Role> --env --profile <local-profile-name>
有人知道在使用aws-adfs时如何在cmd中实现以下操作之一吗?
--env Read username, password from environment
variables (username and password).
--stdin Read username, password from standard input
separated by a newline.
--authfile TEXT Read username, password from a local file
(optional)
更新:
根据下面的注释,在批处理文件中设置用户名和密码的值是有效的。
set "username=my_username"
set "password=my_password"
然而,我们似乎有一个aws-adfs的错误,在windows上,您还需要使用用户名的完整电子邮件地址,但在Linux中,只有用户名才能使用
在Windows上预定义了环境变量USERNAME
,所有字母都在大写,其中包含用户帐户的名称,有关Windows上预定义环境变量的更多信息,请参阅维基百科章节"Windows环境变量"。
2.0.1版本的aws-adfs在Windows上不要求用小写字母定义环境变量username
。环境变量名称在Linux上区分大小写,在Linux中可以定义环境变量USERNAME
,此外还可以定义环境参数username
。
可以在Windows命令提示符窗口中使用:
set "username="
set "username=my_username@mail.com"
set "password="
set "password=my_password"
删除了第一个不区分大小写的环境变量USERNAME
,然后定义了环境变量username
,所有字母都小写,字符串位于等号和末尾的双引号之间。对现有环境变量的重新定义不会更改变量名称中字母的大小写。用户名通常是一个电子邮件地址,应该完全定义。
然后删除不区分大小写的环境变量password
,可能是偶然定义的,并用名称password
重新定义,所有字母都小写,字符串值在命令行末尾的=
和"
之间。
请阅读我关于在命令行上使用"set var=text"后为什么没有"echo%var%"的字符串输出的答案?第一个"
上的Windows命令集位于变量名后面的命令set的参数字符串的开头,或者位于等号后面的字符串值的开头,这会产生很大的不同。set username="my_username"
将带有双引号和错误输入的尾随空格的字符串"my_username"
分配给环境变量username
在这个用例中肯定不好。带有"
的用户名字符串肯定不起作用。
但在Windows命令提示符窗口中也可以只使用:
set "username=my_username@mail.com"
set "password=my_password"
环境变量CCD_ 16的字符串值在这种情况下用字符串CCD_。虽然在命令提示符窗口中完全用小写写下变量名称,但变量名称不会更改。
在PowerShell控制台窗口中,应使用执行相同操作
$Env:username = ''
$Env:username = 'my_username@mail.com'
$Env:password = ''
$Env:password = 'my_password'
或者只使用:
$Env:username = 'my_username@mail.com'
$Env:password = 'my_password'
请参阅有关环境变量-PowerShell的Microsoft文档。
对环境变量列表所做的修改与在Windows命令提示符窗口中使用命令SET所做的相同。
在Windows批处理文件中,最好在单独的本地执行环境中定义两个环境变量,如下所示:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "username=my_username@mail.com"
set "password=my_password"
aws-adfs login --region "region" --adfs-host "adfs-host" --role-arn "Role" --env --profile "local-profile-name"
endlocal
命令SETLOCAL创建一个新的环境变量列表,作为当前环境变量列表的副本。在这个新列表中,环境变量USERNAME
和(如果存在(password
被更新或创建为具有正确字符串值的新的。然后使用这两个环境变量来执行CCD_ 20。最后,命令ENDLOCAL将丢弃刚刚使用的带有变量USERNAME
和password
的环境变量列表,并使用Windows shell为当前帐户默认定义的字符串值恢复带有变量USERNAME
的先前环境变量列表。
有关SETLOCAL和ENDLOCAL令的详细信息,请阅读此答案。