Вызов функции внутри функции с помощью команды вызова Powershell

StackOverflow https://stackoverflow.com//questions/22083674

Вопрос

Я надеюсь вызвать функцию внутри функции в команде вызова.Похоже, я делаю это неправильно.Я получаю сообщение об ошибке «get-group_users» не распознано.Все в одном скрипте ps1.

Урезанный сценарий:

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 и попробуйте использовать его в команде вызова для субкомпьютеров, которые он его не распознает.

Что я забываю?

Это было полезно?

Решение

Вы должны включить get-groups_users определение функции внутри -ScriptBlock параметр при вызове Invoke-Command.Если вы этого не сделаете, удаленный сеанс не будет знать 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top