關於domain user用戶執行admin權限安裝-AutoIt(RunAs)網絡
身邊有同事、朋友,還有一些網友給我留言:關於domain user用戶如何經過另外一個管理員權限用戶來執行程序安裝。。。。dom
暫無論須要安裝的程序是什麼,先不妨試試我寫的一段測試用的腳本示例:ide
#cs Au3 版本: v3.3.9.21 (Beta) 腳本做者:boyhong 技術介紹: http://boyhong.blog.51cto.com #ce #NoTrayIcon ;自行修改如下信息爲你實際信息 Local $sUserName = "autosetupsoftware" Local $sPassword = "abc123#" Local $DOMAIN="tdomain.cn" If IsAdmin() Then Local $ADMIN="當前管理員權限運行" Else Local $ADMIN="當前非管理員權限運行" EndIf Local $pid = RunAs($sUserName, $DOMAIN, $sPassword, 0, @WindowsDir&"\regedit.exe") ;說明:若返回值爲0,請確認:1:這個user的信息是否確認?2:當前是否保持了域網絡鏈接. MsgBox(262144+0,$ADMIN,"返回值:"&$pid)
固然:若測試想基於本地管理員組的話,只需修改:測試
#cs Au3 版本: v3.3.9.21 (Beta) 腳本做者:boyhong 技術介紹: http://boyhong.blog.51cto.com #ce #NoTrayIcon ;自行修改如下信息爲你實際信息 Local $sUserName = "autosetupsoftware" Local $sPassword = "abc123#" If IsAdmin() Then Local $ADMIN="當前管理員權限運行" Else Local $ADMIN="當前非管理員權限運行" EndIf Local $pid = RunAs($sUserName, @ComputerName, $sPassword, 0, @WindowsDir&"\regedit.exe") ;說明:若返回值爲0,請確認:1:這個user的信息是否確認?2:當前是否保持了域網絡鏈接. MsgBox(262144+0,$ADMIN,"返回值:"&$pid)
請保證經過這個測試(經過測試的表現如以上腳本所示,返回值非0,而且打開註冊表),而後的而後,就沒有而後了。。。。。blog
那麼,爲何這麼說呢?個人理解是:繼承
1.若經過了這個測試,代表:$sUserName 指定的用戶名及相關密碼,域這幾個基本信息填寫正確,防有馬大哈出現;進程
2.能夠肯定經過domain user普通用戶使用其它本地管理員組或者直接域管理員來運行任意程序。it
3.在此測試基礎上修改爲生產應用環境就易而反掌了。class
那麼,在實際生產環境中,依然有一些程序安裝使用如此方法不可行,那會有哪些可能呢?返回仔細看:登錄
RunAs ( "用戶名", "域", "密碼", 註冊標誌, "程序" [, "工做目錄" [, 顯示標誌 [, 選項標誌 ]]] )
其中第四個參數:
0 - 不加載配置文件的交互式登陸. 1 - 加載配置文件的交互式登陸. 2 - 使用網絡證書. 4 - 繼承調用進程的環境, 而不是用戶環境.
可能在一些實際生產環境中得使用加載配置文件的交互式登陸.
若你有更好的想法能夠分享一下,在此感謝。
2014.4.5更新:
有朋友QQ問我如何運行自身呢?這樣能夠單一文件搞定...其實Autoit有個宏:@AutoItExe,示例代碼以下:
#cs Au3 版本: v3.3.9.21 (Beta) 腳本做者:boyhong 技術介紹: http://boyhong.blog.51cto.com #ce ;自行修改如下信息爲你實際信息 Local $sUserName = "autosetupsoftware" Local $sPassword = "abc123#" Local $DOMAIN = "tdomain.cn" If IsAdmin() Then Local $ADMIN = "當前管理員權限運行" Exit Else Local $ADMIN = "當前非管理員權限運行" Local $pid = RunAs($sUserName, $DOMAIN, $sPassword, 0, @AutoItExe) ;說明:若返回值爲0,請確認:1:這個user的信息是否確認?2:當前是否保持了域網絡鏈接. MsgBox(262144 + 0, $ADMIN, "返回值:" & $pid) EndIf