Question

J'espère appeler une fonction dans une fonction dans Invoke-Command.Il semble que je ne le fasse pas correctement.J'obtiens l'erreur "get-group_users" n'est pas reconnu.Tout est dans un seul script PS1.

Script tronqué :

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)

Donc, je laisse de côté le get-groups_users fonction.Je peux le poster si quelqu'un pense que cela aidera à tout expliquer.C'est long.Aussi, je laisse de côté le $xmlwriter définitions.

get-groups_users fonctionne quand il fonctionne sur COMP1, mais une fois que j'entre PSSession et essayez de l'utiliser dans la commande Invocation pour les sous-compositions, il ne le reconnaît pas.

Qu'est-ce que j'oublie ?

Était-ce utile?

La solution

Vous devez inclure le get-groups_users définition de fonction à l'intérieur du -ScriptBlock paramètre lorsque vous appelez Invoke-Command.Si vous ne le faites pas, la session à distance n'a aucune connaissance du get-groups_users fonction.

Voici comment résoudre ce problème :

$ScriptBlock = {
    function get-groups_users {
         ############ Put your function's code here ############
    }
    (get-groups_users -ComputerName $ComputerName)
};
Invoke-Command -Session $session -ScriptBlock $ScriptBlock -ArgumentList $ComputerName
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top