2017-12-25 10 views
0

질문이 있습니다. (- cmd를 WIN + R)가 완벽하게VB.NET 및 dsmod

dsmod succeeded:CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL 
를 작동하는 일반 cmd를하지 admin으로

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

: 나는 내 명령 vb.net 에 cmd를에서 AD 사용자 암호를 변경하려고 해요 내가 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. 

어떻게 해결할 수 있습니까? 감사합니다.

+1

64 비트 프로그램에서만 사용할 수있는 명령 종류입니다. 프로젝트> 속성> 컴파일 탭에서 "선호 32 비트"확인란의 선택을 취소하십시오. 문서는 UAC 고도가 필요하다는 것을 언급합니다 https://stackoverflow.com/a/2818776/17034 –

답변

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) 

는 또한 인수의 마지막에 당신이 넣어 여분의 큰 따옴표를 제거하는 자유를했다.

참고 : 동적으로 현재 시스템의 System32 폴더를 얻기 위해

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

: 시스템 폴더가 C:\ 드라이브가 아닌 다른 드라이브에 위치 할 수 있기 때문에, 나는이 코드를 사용했다. 예를 들어 시스템 드라이브의 문자가 D:\ 인 경우이 코드는 D:\Windows\System32을 반환합니다.


편집 :

그것은 dsmod는 64 비트 시스템 디렉터리에서만 사용할 것으로 보인다. 응용 프로그램이 32 비트 응용 프로그램 인 경우 CMD (SysWOW64에 있음)의 32 비트 버전도 시작하므로 System32 디렉토리에있는 64 비트 버전을 열도록 강요해야합니다. 이렇게하려면 CMD의 전체 경로를 지정해야하지만 Sysnative 디렉토리에 지정해야합니다.

System32 대신 Sysnative을 지정하면 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) 
+0

답장을 보내 주셔서 감사합니다. 작업 디렉토리로 System32를 얻지 만 여전히 같은 오류가 발생합니다 ... – user7406533

+0

@ user7406533 : 내 편집을 참조하십시오. –

+0

그 덕분에, 고마워! 이 답변을보기 전까지는 (PowerShell을 사용하여)이 작업을 수행하는 데 더 짧고 간단한 방법을 찾았습니다 ... Dim psi As New ProcessStartInfo ("powershell.exe", "$ newpwd = ConvertTo-SecureString -String"& "" "& TextBox1.텍스트 및 "" ""& "-AsPlainText -Force; Set-ADAccountPassword admin -NewPassword $ newpwd -Reset") 및 2 단계 Dim 프로세스 As Process = Process.Start (psi) ...하지만 회신을 주셔서 감사합니다 ... – user7406533