私はいくつかの関数を持つPowershellスクリプトを持っていますが、Invoke-Commandブロック内からリモートで実行する(パラメータをとり、voidを返します)ローカルで定義された関数をリモートで実行する
私はPowershell 5を使用しています。これをどのように最高に達成できますか?
多くのありがとうございます!
私はいくつかの関数を持つPowershellスクリプトを持っていますが、Invoke-Commandブロック内からリモートで実行する(パラメータをとり、voidを返します)ローカルで定義された関数をリモートで実行する
私はPowershell 5を使用しています。これをどのように最高に達成できますか?
多くのありがとうございます!
タイプFunctionInfo
のオブジェクトをリモートコマンドに渡し、もう一方の側で関数を再作成することができます。
function foo($a) { write-host "foo says: $a" }
次にあなたがFunctionInfoを得ることができます:
$f = get-item function:\foo
今、リモートコマンドの引数として渡し:
Invoke-Command "computer1" {
param($fobj)
invoke-expression "function $($fobj.name) { $($fobj.ScriptBlock) }"
foo "hello!"
} -ArgumentList $f
(あなたがいないことに注意してくださいあなたが機能を持っているとしましょう他の側で$fobj
がPSObject
のタイプであるため、FunctionInfo
ではない)set-item function:\foo $fobj
を実行してください。
foo
がローカルマシンで定義されている他の機能を呼び出す場合は、それらも渡す必要があります。したがって、この手法は本当にシンプルな関数の場合にのみ有効です。もっと複雑なものについては、それらをモジュールにカプセル化し、そのモジュールをリモートマシンにインストールすることを検討してください。ここで
述べたように、あなたは、引数として関数を渡すことができ、しかし、その代わりGet-Item
を使用することは$Variable = Get-Content Function:\Foo
を使用してInvoke-Expression
を使用することはベストプラクティスではないようinvoke-Command
にそれを渡すことをお勧めします。
Invoke-Command -ComputerName -$Server -ScriptBlock {Param($Var1)
$Var1 #This will execute your function as usual.
} -ArgumentList $Variable
$ VAR1あなたはあなたの関数にパラメータを持っている場合は、あなたがGet-Help Invoke-Command -Parameter Argumentlist
Invoke-Command -ComputerName -$Server -ScriptBlock {Param($Var1,$Par1,$Par2)
$Var1 $Par1 $Par2 #This will execute your function as usual.
} -ArgumentList $Variable,$Param1,$Param2
と同様、次に渡す必要がありSystem.Management.Automation.FunctionInfo
型になります
および
https://powershell.org/2012/08/06/ebook-secrets-of-powershell-remoting/
に関して、コードは単にネットワーク上の場所からそのモジュールをインポートするリモートクライアント上で、モジュールとしての機能に署名
kvprasoon
。 – user4317867