在批处理文件中询问用户凭据

时间:2018-09-17 08:51:46

标签: powershell batch-file

我试图弄清楚如何提示用户输入用户凭据并处理批处理文件中的密码。

经过大量修改后,我想到了以下代码:

@echo off

set password=

FOR /F "tokens=* USEBACKQ" %%F IN (`powershell -NoLogo -NoProfile  -Command ^(Get-Credential "ag\%username%"^).GetNetworkCredential^(^).password;`) DO (
  set password=%%F
)
echo %password%

如果用户输入非空密码,则此方法很好。但是,如果用户什么也不输入,或者只是通过单击“取消”关闭对话框窗口,则变量“密码”突然包含字符串“ ECHO ist ausgeschaltet(OFF)”。而不是一个空字符串。

有人知道在这种情况下如何返回空字符串作为密码吗?

预先感谢 固体

2 个答案:

答案 0 :(得分:2)

环境变量始终具有一个值。如果分配了空字符串,则将删除该变量(在运行的过程中)。

SET FOO=

变量FOO已通过上面的语句删除。

因此,您需要检查变量是否已定义且不为空。

if defined FOO echo FOO:%FOO%
if not defined FOO echo FOO is not defined

答案 1 :(得分:0)

实际上password没有定义。
您得到的ECHO ist ausgeschaltet (OFF)ECHO命令的输出,因为您不带任何数据调用它。

要查看真实内容,可以使用set passwordECHO(,当变量的内容为空时,奇怪的开头括号可以防止出现问题

...
echo( %password%
set password

顺便说一句。您应该使用扩展集语法,以避免出现尾随的白色字符。

set "password="
...
   set "password=%%F"