我相信我已经阅读了所有相关的 Process.Start
模拟问题 - 至少是我可以通过 Google 找到的所有内容,但我还没有找到符合这种情况的问题(90% 是回复:ASP 这是一个完全不同的球赛)
场景:我们有一个小工具,它使用当前用户凭据查询 AD,获取匹配搜索的服务器列表,通过 SMB 连接到它们并获取共享列表。
有人要求我使用域用户的凭据使此过程在不在域中的计算机上运行时能够正常工作。
我添加了一个开关,它会在启动时提示输入凭据,然后使用适当的凭据提示 Process.Start() 相同的可执行文件(以节省学习 runas/netonly ...
的人)。
这给我带来了一些问题。我正在测试的代码如下...
Dim ProcInfo As New ProcessStartInfo With {
.Domain = dlgImpersonate.Domain,
.UserName = dlgImpersonate.Username,
.Password = dlgImpersonate.Password,
.FileName = Reflection.Assembly.GetEntryAssembly.Location,
.UseShellExecute = False}
Try
Process.Start(ProcInfo)
ShouldEnd = True
Catch ex As Exception
'HandleException(ex)
MessageBox.Show(ex.Message, "Impersonation failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
所以...如果我在我的机器上(在域上)运行代码,我可以冒充任何人。查询 AD 有一些怪癖,但那是另一个问题。
如果我在一台全新的机器上(不是在域上)运行代码,我得到:
Win32Exception: Logon failure: unknown user name or bad password
Stack:
at Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at Process.Start(ProcessStartInfo startInfo)
...My code
我想知道机器是否只是不知道该域或如何对其进行身份验证,所以我随后尝试从命令提示符...
runas /netonly /user:MyDomain\MyUser Test.exe
这很好用。
那么...我如何找到 Process.Start
未按预期进行身份验证的原因?
注意:凭据是正确的 - 我什至诉诸从记事本复制/粘贴以进行完整性检查
最佳答案
基本上,您将 runas 与/netonly 一起使用。但是您仍然需要手动输入密码。您可以执行/savecred 来缓存信用。
关于.net -/NetOnly 从非域 PC 模拟域用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767802/