同事遇到的問題:使用本機管理者帳號登入遠端主機,執行 AD 相關 Cmdlet 會因無權存取 AD 資源出錯(ADIdentityNotFoundException)。

由於政策不允許 AD 帳號登入遠端主機,故較好的解決方式是「用本機帳號登入,再切換用 AD 帳號開 PowerShell 視窗做事」。

查了一下找到兩種簡單做法

GUI 派

在工作列 PowerShell 項目按 Shift + 滑鼠右鍵叫出檔案總管選單,有個 Run as different user:

Windows 將彈出帳號密碼登入對話框,方便改用其他身分跑 PowerShell:

CLI 派

使用指令 start powershell -credential ''

如果想指定帳號或密碼(把密碼寫進程式是安全大忌,請三思),可參考以下寫法:

# 指定帳號
$userName = 'DOMAIN\userId' 
# 顯示帳號密碼對話框取得密碼
$diag = Get-Credential -UserName $userName -Message '請輸入密碼'
$pwd = $diag.Password
# 或 直接指定密碼 (有資安疑慮,不建議)
$pwd = ConvertTo-SecureString 'blah blah blah' -AsPlainText -Force
# 建立認證物件
$cred = New-Object System.Management.Automation.PSCredential $userName,$pwd
start powershell -Credential $cred


Comments

# by Hung

想請問黑大有辦法讓C#桌面程式在程式內(不透過GUI或是RUN AS外部方法)使用不同身分執行dcom元件並通過AD驗證嗎? 以前實作過LogonUser等方法但都只適用如網芳等情境,WMI也有各種手法可以成功讀取windows2003 -2022,但目前一直無法攻克dcom元件的AD驗證,只能在其他主機上另架Web服務並使用主機通用的LOCAL帳號登入存取,導致架構變複雜且麻煩,謝謝。

# by Jeffrey

to Hung, 我對 DCOM 研究有限,加上參考資源稀少且不值得再投資,對面對同樣問題,應該不會跟它拼命,而是選 RunAs 或另架 Web Service 的路(做法跟你接近)。

Post a comment