Aufrufen einer Funktion innerhalb einer Funktion mit invoke-command Powershell
-
24-12-2019 - |
Frage
Ich hoffe, eine Funktion innerhalb einer Funktion im Aufrufbefehl aufrufen zu können.Es sieht so aus, als ob ich das nicht richtig mache.Ich erhalte die Fehlermeldung „get-group_users“ wird nicht erkannt.Alles ist in einem PS1-Skript.
Verkürztes Skript:
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)
Also lasse ich das weg get-groups_users
Funktion.Ich kann es posten, wenn jemand denkt, dass es hilft, alles zu erklären.Es ist lang.Außerdem lasse ich das weg $xmlwriter
Definitionen.
get-groups_users
funktioniert, wenn es auf COMP1 läuft, aber sobald ich es betrete PSSession
und versuchen Sie es im Aufrufbefehl für die Sub-Comps zu verwenden, die es nicht erkennen.
Was vergesse ich?
Lösung
Sie müssen die einschließen get-groups_users
Funktionsdefinition innerhalb der -ScriptBlock
Parameter beim Aufruf Invoke-Command
.Wenn Sie dies nicht tun, hat die Remote-Sitzung keine Kenntnis davon get-groups_users
Funktion.
So beheben Sie das Problem:
$ScriptBlock = {
function get-groups_users {
############ Put your function's code here ############
}
(get-groups_users -ComputerName $ComputerName)
};
Invoke-Command -Session $session -ScriptBlock $ScriptBlock -ArgumentList $ComputerName