2015-12-08 64 views
2

我正在使用AutoIT(& VBS)腳本將PC從Windows(7)鎖定屏幕加入域。我用我的腳本替換了system32文件夾中的Utilman.exe。當在Windows鎖定屏幕上點擊訪問方便按鈕時,我的Autoit GUI會出現並顯示IP,PC名稱,併爲最終用戶提供一些自助按鈕。AutoIT&VBS - 從Windows鎖定屏幕將PC添加到域

我的GUI上的其中一個按鈕調用一個函數,將PC重新加入域,使其脫離域。我的問題是,從鎖定屏幕,加入域按鈕運行,但不會將PC加入域。即使重新啓動後。如果我登錄到管理員帳戶並單擊相同的加入域按鈕,則PC將被添加到域中而不會出現問題。這讓我頗爲困惑,因爲我的腳本作爲SYSTEM用戶從鎖定屏幕運行。有關此問題的任何意見和建議非常感謝!

用於將PC與域聯合的函數如下。它的工作原理,當登錄到管理員帳戶,但PC不會加入從Windows鎖屏

編輯域:域腳本來自這個例子: http://www.vbsedit.com/scripts/ad/computer/scr_5.asp

這個想法從運行腳本鎖屏來自下面的例子。香港專業教育學院取代Utilman.exe與我的腳本,命名我的腳本Utilman.exe並把它放在system32文件夾 https://www.technibble.com/bypass-windows-logons-utilman/

Func joinDomain() 

$file = FileOpen("C:\IT\joinDomain.vbs", 1) 
    FileWriteLine($file, 'Const JOIN_DOMAIN = 1') 
    FileWriteLine($file, 'Const ACCT_CREATE = 2') 
    FileWriteLine($file, 'Const ACCT_DELETE = 4') 
    FileWriteLine($file, 'Const WIN9X_UPGRADE = 16') 
    FileWriteLine($file, 'Const DOMAIN_JOIN_IF_JOINED = 32') 
    FileWriteLine($file, 'Const JOIN_UNSECURE = 64') 
    FileWriteLine($file, 'Const MACHINE_PASSWORD_PASSED = 128') 
    FileWriteLine($file, 'Const DEFERRED_SPN_SET = 256') 
    FileWriteLine($file, 'Const INSTALL_INVOCATION = 262144') 
    FileWriteLine($file, ' ') 
    FileWriteLine($file, 'strDomain = "Domain.net"') 
    FileWriteLine($file, 'strPassword = "joinDomainPassword"') 
    FileWriteLine($file, 'strUser = "SDSUser"') 
    FileWriteLine($file, ' ') 
    FileWriteLine($file, 'Set objNetwork = CreateObject("WScript.Network")') 
    FileWriteLine($file, ' strComputer = objNetwork.ComputerName') 
    FileWriteLine($file, ' ') 
    FileWriteLine($file, 'Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _') 
    FileWriteLine($file, ' strComputer & "\root\cimv2:Win32_ComputerSystem.Name=''" & _ ') 
    FileWriteLine($file, ' strComputer & "''") ') 
    FileWriteLine($file, ' ') 
    FileWriteLine($file, 'ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _') 
    FileWriteLine($file, ' strPassword, strDomain & "\" & strUser, NULL, _') 
    FileWriteLine($file, ' JOIN_DOMAIN + ACCT_CREATE)') 
FileClose($file) 
Sleep(100) 

    RunWait(@ComSpec & " /c " & 'wscript.exe C:\IT\joinDomain.vbs', @SystemDir, @SW_HIDE) 

sleep(1000) 
FileDelete("C:\IT\joinDomain.vbs") 
messageBox() 
EndFunc 

這裏是上面的VBS腳本的一個完整的AutoIt版本。當以管理員身份登錄時它工作正常,但當我從Windows鎖定屏幕撥打 相同的功能時,出現錯誤2717。

                            Const $JOIN_DOMAIN = 1 
Const $ACCT_CREATE = 2 
Const $ACCT_DELETE = 4 
Const $WIN9X_UPGRADE = 16 
Const $DOMAIN_JOIN_IF_JOINED = 32 
Const $JOIN_UNSECURE = 64 
Const $MACHINE_PASSWORD_PASSED = 128 
Const $DEFERRED_SPN_SET = 256 
Const $INSTALL_INVOCATION = 262144 

Const $DOMAIN = "Domain.net" 
Const $ADMINKENNWORT = "Password" 
Const $ADMIN = "SDUser" 
Const $COMPUTER = @ComputerName 

$objComputer = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\" & $COMPUTER & "\root\cimv2:Win32_ComputerSystem.Name='" & $COMPUTER & "'") 
$Result = $objComputer.JoinDomainOrWorkGroup($DOMAIN, $ADMINKENNWORT, $DOMAIN & "\" & $ADMIN, "", $JOIN_DOMAIN + $ACCT_CREATE) 
If ($Result <> 0) Then 
    MsgBox(0, "Error Joining the Domain", $COMPUTER & " Error code: " & $Result) 
EndIf 
+0

這是上面的VBS腳本的完整AutoIT版本。它以管理員身份登錄時工作正常,但當我從Windows鎖定屏幕調用相同功能時,出現錯誤2717。 – Duck

回答

0

使用wmi.here是UDF。

Func _SetWorkGroup($WorkGroup) 
;================================ 
;Usage:_SetWorkGroup(WprkGroup Name) 
;Make By Sanhen 
;================================ 
Local $objNetwork, $strComputer 

$objNetwork = ObjCreate("WScript.Network") 
$strComputer = $objNetwork.ComputerName 
$objComputer = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\" & _ 
     $strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" _ 
     & $strComputer & "'") 
Return $objComputer.JoinDomainOrWorkGroup($WorkGroup) 
EndFunc ;==>_SetWorkGroup 
0

我覺得你只是運行到配股。嘗試將其添加到腳本的頂部:

#RequireAdmin 
+0

不幸的是,添加#RequireAdmin無法解決問題。登錄到帳戶後仍然工作得很好,但不是從Windows鎖定屏幕。當我拉取用戶名時,通過@UserName在鎖屏上顯示腳本以SYSTEM身份運行。 – Duck