2013-07-02 37 views
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) 
} 

回答

1

變化(加括號)read-host "Enter server(comma separated list): ".split(",")(read-host "Enter server(comma separated list)").split(",")

+0

那種作品,因爲它不再顯示錯誤。相反,它可以工作,但只能在逗號​​分隔列表中的最後一項。我試着在最後(在最後的if語句中)放置一個foreach語句,但它似乎只是拾取最後輸入的服務器名稱。 –

+0

您確實需要將最終的Invoke方法調用添加到現有的For循環中。我認爲你正在處理兩個問題:正確地從讀取主機獲取輸入,並讓ADSI添加/刪除工作。因此,爲了調試,我建議在Invoke()調用之前在for循環中添加諸如'write-host $ action user $($ objADUser.path)之類的東西。這會告訴你輸入是否正確。至於獲得ADSI方法的工作將需要你提供你的配置更多的細節 –

相關問題