Appel d'une fonction dans une fonction avec Invoke-command Powershell
-
24-12-2019 - |
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 ?
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