2014-02-28 50 views
1

我希望在invoke-command的函數中調用函數。看起來我沒有正確地做到這一點。我得到「get-group_users」不被識別的錯誤。一切都在一個ps1腳本。使用invoke-command調用函數中的函數Powershell

截斷腳本:

function get-session { 
$session = New-PSSession -ComputerName $ip -Credential $cred -Auth CredSSP 
$ComputerName = $cred.Replace('\Admin',"") 
$csv = "C:\Scripts\Serverlists\" + $ComputerName + ".txt" 
$subcomps = import-csv $csv | foreach-object {$_.Name} 

foreach ($ComputerName in $subcomps) 
{ 
$ComputerName 
$xmlWriter.WriteStartElement("Computer",$ComputerName) 

Invoke-Command -Session $session -ScriptBlock { (get-groups_users -ComputerName $ComputerName) } -ArgumentList $ComputerName 

$xmlWriter.WriteEndElement() 
} 
Remove-PSSession -ComputerName $ip 
} 



$ip = '172.16.24.11' 
$ComputerName = "COMP1" 
$user = '\Admin' 
$cred = $ComputerName + $user 

(get-groups_users -ComputerName $ComputerName) 
(get-session -Credential $cred -ComputerName $ip) 

所以,我要離開了get-groups_users功能。如果有人認爲這將有助於解釋一切,我可以發佈它。這是一個很長的。另外,我將刪除$xmlwriter的定義。

get-groups_users當它運行在COMP1上時,但是一旦我輸入PSSession並嘗試在invoke-command中使用它時,它不會識別它。

我忘了什麼?

回答

2

當您撥打Invoke-Command時,必須在-ScriptBlock參數中包含get-groups_users函數定義。如果不這樣做,遠程會話不知道get-groups_users函數。

以下是如何解決這個問題:

$ScriptBlock = { 
    function get-groups_users { 
     ############ Put your function's code here ############ 
    } 
    (get-groups_users -ComputerName $ComputerName) 
}; 
Invoke-Command -Session $session -ScriptBlock $ScriptBlock -ArgumentList $ComputerName 
+0

所以我必須把GET-groups_users函數中,而它必須保持外呢? (用於與會話功能分開運行) – snoop

+0

您必須將其保留在外部,否則本地會話將不知道它。 –

+1

真棒謝謝! – snoop