VB.NET和dsmod

问题描述 投票:0回答:1

我有个问题。我正在尝试使用vb.net我的命令在cmd中更改AD用户密码:

dsmod user "CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL" -pwd test1

在一个普通的cmd而不是管理员(WIN + R - cmd),它完美地运作

dsmod succeeded:CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL

但是当我通过vb.net运行相同的命令时:

Process.Start("cmd.exe", "/k dsmod user " & """" & "CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL" & """" & " -pwd " & TextBox1.Text & """")

我明白了:

'dsmod' is not recognized as an internal or external command,
operable program or batch file.

我怎样才能解决这个问题?谢谢

vb.net cmd
1个回答
0
投票

默认情况下,通过Process.Start()启动的任何进程都会获得与应用程序相同的工作目录。 dsmod.exe文件很可能位于System32中,因此您必须将新进程的工作目录设置为该文件才能找到该文件。

Dim psi As New ProcessStartInfo("cmd.exe", "/k dsmod user " & """" & "CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL" & """" & " -pwd " & TextBox1.Text)
psi.WorkingDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "System32")

Process.Start(psi)

我也冒昧地删除你在参数末尾添加的额外双引号,因为它没有匹配的起始引用。

注意:由于系统文件夹可能位于与C:\驱动器不同的驱动器上,因此我使用了以下代码:

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "System32")

为了动态获取当前系统的System32文件夹。因此,例如,如果系统驱动器具有字母D:\,则此代码将返回D:\Windows\System32


编辑:

似乎dsmod仅在64位系统目录中可用。如果您的应用程序是32位应用程序,它也将启动32位版本的CMD(位于SysWOW64),因此您必须强制它打开位于System32目录中的64位版本。要做到这一点,你必须指定CMD的完整路径,但是在Sysnative目录中。

通过指定Sysnative而不是System32,您可以阻止系统将您重定向到32位应用程序的SysWOW64目录。

Dim CmdPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), If(Environment.Is64BitProcess OrElse Environment.Is64BitOperatingSystem = False, "System32", "Sysnative"), "cmd.exe")

Dim psi As New ProcessStartInfo(CmdPath, "/k dsmod user " & """" & "CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL" & """" & " -pwd " & TextBox1.Text)
psi.WorkingDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "System32")

Process.Start(psi)
© www.soinside.com 2019 - 2024. All rights reserved.