1

我终于可以通过 VPN 在家工作(使用 Shrew 作为客户端),我只有一个烦恼。我们使用一些批处理文件将配置文件上传到网络驱动器。在工作和我的团队负责人的笔记本电脑上工作正常,但这两台机器都在域中。我的家庭系统不是,也不会是,所以当我运行批处理文件时,由于我不是域用户,我收到大量“无效驱动器”错误。

到目前为止我找到的解决方案是使用以下内容制作一个批处理文件:

explorer \\MACHINE1
explorer \\MACHINE2
explorer \\MACHINE3

然后在它们弹出时使用我的域凭据手动登录到每台机器。不幸的是,我可能需要使用大约 10 台机器,如果我错过了批处理文件所需的密码,那么继续输入密码会很痛苦。

我正在研究使用这个问题的答案来制作一个小 C# 应用程序,该应用程序将获取登录信息一次并以编程方式登录。身份验证会自动与 Explorer 共享,还是有什么特别需要我做的?如果它确实有效,凭据缓存了多长时间?

是否有一个应用程序可以自动执行此类操作?

不幸的是,我们的管理员表示,无法通过 VPN 进行域身份验证。

编辑:如果有办法通过命令行将登录信息传递给资源管理器,那么使用 Ruby 和 highline 会更容易。

编辑:如果其他人有同样的问题,这是我最终使用的解决方案。它需要 Ruby 和 Highline gem。

require "highline/import"

domain = ask("Domain: ")
username = ask("Username: ")
password = ask("Password: ") { |q| q.echo = false }

machines = [
    '\\MACHINE1\SHARE', 
    '\\MACHINE2\SHARE', 
    '\\MACHINE3\SHARE', 
    '\\MACHINE4\SHARE', 
    '\\MACHINE5\SHARE'
]
drives = ('f'..'z').to_a[-machines.length..-1]

drives.each{|d| system("net use #{d}: /delete >nul 2>nul"); }

machines.zip(drives).each{|machine, drive| system("net use #{drive}: #{machine} #{password} /user:#{domain}\\#{username} >nul 2>nul")}

它会计算出我需要多少映射驱动器,然后开始将它们映射到请求的共享。在这种情况下,它将它们从 V: 映射到 Z:,并假设我没有与这些驱动器号共享任何内容。

如果你已经有一个资源管理器窗口打开了其中一个共享,它可能会出错,所以在我运行 Ruby 脚本之前,我运行了:

net use * /delete

这清除了“不允许共享的多个连接”错误,并允许我毫无问题地连接。

4

3 回答 3

1

要通过命令行将凭据传递给资源管理器,您应该查看命令net use

于 2010-05-10T15:07:47.500 回答
1

通过 P/Invoke 使用 API WNetAddConnection2()。

于 2010-05-10T15:09:37.503 回答
1

您可以创建一个使用“ NET USE ”连接到您的共享的批处理文件。您需要为每个共享使用一个驱动器号,但实现起来非常简单。

您的批处理文件将如下所示:

net use h: \\MACHINE1 <password> /user:<domain>\<user>
net use i: \\MACHINE2 <password> /user:<domain>\<user>
net use j: \\MACHINE3 <password> /user:<domain>\<user>

更新

连接是否保持取决于您为 /persistent 开关指定的内容。如果您指定是,那么它将在您下次登录时尝试重新连接。如果您指定否,则不会。令人担忧的是文档说它默认为您上次使用的值!

如果您指定否,则连接将保持到您下次重新启动。如果您断开 VPN 连接,驱动器将不可用(但如果您重新连接到 VPN,驱动器应该可用,只要您没有删除它)。

我不知道在不映射到驱动器号的情况下使用它的方法,文档会让您相信这是不可能的。

我理解你的问题,你只是想给资源管理器正确的凭据,这样它就不会再用登录框唠叨你了。使用映射驱动器虽然并不完美,但至少可以减轻您的痛苦。

于 2010-05-10T15:17:32.840 回答