我正在使用AutoIT(&VBS)脚本从Windows(7)locking屏幕将PCjoin域。 我用我的脚本replace了system32文件夹中的Utilman.exe。 当在Windowslocking屏幕上单击访问方便button时,我的Autoit GUI会出现,并显示IP,PC名称,并为最终用户提供一些自助button。
我的GUI上的一个button调用了一个函数来重新join一个电脑到域名下的域名。 我的问题是,从锁屏,join域button运行,但不join到域的PC。 即使在重启之后。 如果我login到一个pipe理员帐户,并点击相同的join域button,PC被添加到域没有问题。 这让我颇为困惑,因为我的脚本作为SYSTEM用户从locking屏幕运行。 任何有关这个问题的意见和build议,
下面是我用来连接PC和域的function。 它在login到pipe理员帐户时起作用,但不会从Windowslocking屏幕将PCjoin域
编辑:域脚本来自这个例子: http : //www.vbsedit.com/scripts/ad/computer/scr_5.asp
而从锁屏运行脚本的想法来自下面的例子。 我用我的脚本replaceUtilman.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版本。 它以pipe理员身份login时工作正常,但是当我从Windowslocking屏幕调用相同的function时,出现错误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
使用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
我认为你只是遇到了一个权利问题。 尝试添加到脚本的顶部:
#RequireAdmin