hekkaaa
@hekkaaa
Junior Powershell DevOps

Как прокинуть функцию в Invoke-Command?

Привет.
Вопрос такой нужно прокинуть функцию в invoke-command функции.
Пример:

function a1 { 
$aa1 = 'Name1'
"Code code code...."
return $aa1
}

function b2 {
 invoke-command -computername $Computer -scriptBlock {
''Code code code"
# <------- вот здесь мне необходима функция a1
$exit = 'CODE CODE '

return $exit
}
}

$variable = b2
'Все равно этому значению ' + $variable | out-file C:/Temp/log.txt


Проблема в том что через Param не прокидывается функция. Даже если заключить функцию предварительно в переменную. Выходит ошибка в отчете что "имя не найдено" (вообщем не знает такой функции с указанным именем.)
Вариант Можно вызвать свою функцию из скрипта в Invoke-Command? хороший. Но мне нужно не просто функцию использовать, а еще отдельный код. Как совместить и то и другое не совсем понимаю.

Предлагать заранее все засунуть в 1 функцию и воспользоваться 1 общей функцией:
Invoke-Command -ComputerName DC1 -ScriptBlock ${Function:MyFunction}

Не совсем подходящее решение для меня.

Прошу подсказать варианты решения если такие есть.
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
@MaxKozlov
Ну раз уж меня магическим образом вызвали... :)

Самый простой способ вызывать удалённо - это вызывать файл, а не скрипт-блок. а уж в нём понаписать любых функций. Invoke-Command -FilePath ....

Но если вызов файла не устраивает, а локальные функции использовать хочется, то можно использовать такой трюк.

function foo {
param($a)
 "I'm a FOO func on $($env:COMPUTERNAME)- $a"
}
function bar {
param($a)
 "I'm a BAR func on $($env:COMPUTERNAME)- $a"
}

# variant 1
$foo = $function:foo
Invoke-Command -ComputerName REMOTE {
   Set-Content function:foo $using:foo
   foo 'aaa'
}
#variant 2
Invoke-Command -ComputerName REMOTE {
  param($bar)
  Set-Content function:bar $bar
  bar 'aaa'
} -ArgumentList $function:bar


Естественно, таким образом надо импортировать в удалённую сессию все необходимые локальные функции
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы