在命令提示符下使用 aws-adfs 时如何指定用户名/密码

How to specify username/ password when using aws-adfs in command prompt

在 Linux 中,以下命令在我们为环境变量指定用户名和密码并使用 '--env" 开关

在 aws-adfs 中使用时运行良好
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>

在 Windows 上使用 cmd,我无法使“--env”工作。不管我在这里尝试了什么,它总是使用我的 AD 登录用户,而不是我想使用的第二个帐户的 user/password。

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 Environment Variables 了解更多信息Windows.

上的预定义环境变量

aws-adfs 版本 2.0.1 不要求 Windows 环境变量 username 定义为所有字母均为小写。环境变量名称是 Linux 上的 case-sensitive,其中可以定义一个环境变量 USERNAME,另外还可以定义一个环境变量 username

可以在Windows命令提示符中使用 window:

set "username="
set "username=my_username@mail.com"
set "password="
set "password=my_password"

首先删除了case-insensitive环境变量USERNAME,然后定义了环境变量username,所有字母小写,等号和双引号之间的字符串字符在最后。现有环境变量的重新定义不会改变变量名称字母的大小写。用户名通常是电子邮件地址,应该完整定义。

然后删除 case-insensitive 环境变量 password 可能是偶然定义的,并用名称 password 重新定义,所有字母均为小写,字符串值在 [=23= 之间] 和 " 在命令行末尾。

请先阅读我在 Why is no string output with 'echo %var%' after using 'set var = text' on command line? It makes a big difference for the Windows command set 上的回答 " 位于命令参数字符串的开头 SET 左侧变量名称或开头等号后的字符串值。 set username="my_username" 将带有双引号的字符串 "my_username" 和错误输入的尾随空格分配给环境变量 username ,这在这个用例中肯定不好。带有 " 的用户名字符串肯定不起作用。

但也可以在 Windows 命令提示符 window 中使用:

set "username=my_username@mail.com"
set "password=my_password"

环境变量 USERNAME 的字符串值在本例中更新为字符串 my_username@mail.com。尽管在命令提示符中将名称完全小写,但变量名称没有改变 window.

PowerShell 控制台中 window 应该用同样的方式完成:

 $Env:username = ''
 $Env:username = 'my_username@mail.com'
 $Env:password = ''
 $Env:password = 'my_password'

或者只用了:

 $Env:username = 'my_username@mail.com'
 $Env:password = 'my_password'

请参阅 Microsoft 文档 about Environment Variables - PowerShell

对环境变量列表所做的修改与在Windows命令提示符window.[=43=中使用命令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 被更新或使用正确的字符串值创建新的。然后使用这两个环境变量执行aws-adfs。最后,命令 ENDLOCAL 丢弃刚刚使用的环境变量列表,变量为 USERNAMEpassword,并恢复之前的环境变量列表,变量为 USERNAME 使用 Windows shell.

默认为当前帐户定义的字符串值

阅读 以获取有关命令 SETLOCALENDLOCAL.

的详细信息