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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top