长话短说,我需要映射一系列 WebDav 文件夹,无论出于什么原因,在不同的时间,都需要反复尝试进行身份验证才能成功完成。
我创建了以下脚本以使事情变得更容易,也就是说,我不必为第一个共享复制并粘贴 15 次 net use 命令,然后希望第 15 次能够成功连接。
我尝试的是第一次尝试“常规”映射。如果这不起作用(我们会知道,因为它会检查该位置的文件夹是否“存在”,如果驱动器映射成功,它应该存在),然后它会再次提示输入凭据,以防我输入错误的密码(尽管这种情况很少见)。理想情况下,我希望能够在输入密码时将其删除,因为现在它显示为纯文本。
然后,使用我存储在变量“pword”中的密码,我有一个循环,尝试使用存储在变量中的密码一遍又一遍地映射位置,直到它可以成功连接。
我意识到我可以将密码放在脚本中。这是在公共位置,所以我真的不想在脚本中输入用户名。我无法在脚本中输入密码。现在,它会提示输入帐户密码,因为没有提供密码。密码位于用户名之后和 /P:no 开关之前,这确保驱动器不会坚持会议结束后。
目前,这不起作用(这并不奇怪)。但我不明白为什么。我的脚本正在循环,但我一直得到System error 1244 has occurred. The operation being requested was not performed because the user has not been authenticated.
所以不知何故,我手动交互提交给变量的密码没有像它应该的那样传递到网络使用开关中。无论我在提示符下输入正确的密码与否,我都会收到错误 1244,所以不知何故它没有尝试使用通过变量手动提供的凭据进行连接。
我该如何修复这个问题,让用户输入 ***(带星号)无效(因为它提示输入密码,但 cmd.exe 不知道这一点),更重要的是,我可以通过输入一次(好吧,两次)密码来强行建立连接,然后让我的批处理文件自动将其替换为密码,而不是每次都提示。这很烦人,每次登录都要这样做 15 次。这里有什么问题吗?或者有更好的方法吗?
net use k: "https://d.docs.live.net/###/Documents/somefolder" /USER:[email protected] /P:No
if exist "K:\x" GOTO ContinueMapping
echo Windows will try to connect using the following password:
set /p pword=WebDav password:
:BruteConnect
net use k: "https://d.docs.live.net/$$$/Documents/somefolder" /USER:[email protected] %pword% /P:No
if exist "K:\x" GOTO ContinueMapping
GOTO BruteConnect
:ContinueMapping
(More drives get mapped here, and they all map successfully once the first drive gets mapped)
答案1
您的脚本实际上并没有创建网络连接。
在连接激活之前会有一段时间间隔。凭证存储在您的凭证管理器中,但一旦您查询对此类位置的访问权限,与此类位置的连接就会激活。
拒绝访问:5 错误是由于您没有以管理员身份运行脚本,而这是执行 Net Use 命令所必需的。
这和在资源管理器窗口中输入该地址、按回车键、等待 10 到 20 秒建立连接完全相同,然后 K 驱动器也会自动工作。
如果您提示输入密码,除非您以管理员身份运行脚本,否则脚本仍然会失败,但此时脚本的第一个版本就可以正常工作。
请注意,当您使用此方法时,脚本在尝试创建连接时会停滞 10-20 秒,然后才会成功。
因此从理论上讲,您可以像以前一样正常调用脚本,等待 10 到 20 秒,它就会神奇地开始工作。
这是访问 Office365/Sharepoint/等共享时出现的已知问题。由于 OneDrive 经常出现此类连接问题,因此 Microsoft 用它替代了它。