0
我正在處理一個腳本,該腳本可讓我將用戶添加到一組服務器,然後在稍後的日期從組中刪除所述用戶。現在,我可以使腳本工作時,我只有一臺服務器,但是當我用逗號分隔的列表,我得到以下錯誤:Exception calling "Invoke" with "2" argument(s): "Unknown error (0x80005000)"
將用戶添加到服務器的管理員組,遇到錯誤
我運行腳本上所必需的設備管理員,和我執行策略設置爲允許腳本在我所針對的任何服務器上運行。此外,該域的情況是:
目標服務器:
DomainA/ServerA
DomainA/ServerB
用戶:
DomainB/UserA
我可以被登錄到服務器添加用戶的罰款。這裏是我正在使用的代碼:
param($serverName, $group, $user, $action)
if (! $serverName) {
$serverlist = read-host "Enter server(comma separated list): ".split(",")
}
if (! $group) {
$group = read-host "Enter group: "
}
if (! $action) {
$action = read-host "Add, Remove or List: "
}
$objGroup = [ADSI]("WinNT://$serverName/$group")
if ($action.ToLower() -eq "list") {
$members = @($objGroup.psbase.Invoke("Members"))
$members | foreach {
$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
}
} else {
if (! $user) {
$user = read-host "Enter domain user id: "
}
foreach ($serverName in $serverList) {
$serverName = $serverName.Trim().ToUpper()
$objADUser = [ADSI]("WinNT://$serverName/$user")
}
$objGroup.PSBase.Invoke($action,$objADUser.PSBase.Path)
}
那種作品,因爲它不再顯示錯誤。相反,它可以工作,但只能在逗號分隔列表中的最後一項。我試着在最後(在最後的if語句中)放置一個foreach語句,但它似乎只是拾取最後輸入的服務器名稱。 –
您確實需要將最終的Invoke方法調用添加到現有的For循環中。我認爲你正在處理兩個問題:正確地從讀取主機獲取輸入,並讓ADSI添加/刪除工作。因此,爲了調試,我建議在Invoke()調用之前在for循環中添加諸如'write-host $ action user $($ objADUser.path)之類的東西。這會告訴你輸入是否正確。至於獲得ADSI方法的工作將需要你提供你的配置更多的細節 –