リモート マシンの PSSession オブジェクトがあり、「コマンド」を実行しようとしています。
アプローチ 1 (実際のコマンドを実行する前に enter-pssession を呼び出す):
Command cmd = new Command("enter-pssession");
cmd.Parameters.Add("Session",session);
pipeline.Commands.Add(cmd);
pipeline.Commands.Add(command);
アプローチ 2 (実際のコマンドを実行する前に import-pssession を呼び出す):
Command cmd = new Command("import-pssession");
cmd.Parameters.Add("Session",session);
pipeline.Commands.Add(cmd);
pipeline.Commands.Add(command);
どちらのアプローチも機能せず、エラー メッセージもかなり明確です。「「コマンド」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してからやり直してください」 ."
アプローチ 3 - 動作します (Invoke-Command を使用し、スクリプトブロックとセッション オブジェクトを使用して cmd を実行します)。
Command cmd = new Command("invoke-command");
cmd.Parameters.Add("session", session);
cmd.Parameters.Add("scriptblock", ScriptBlock.Create(command.ToString()));
if (null != argumentList)
{
cmd.Parameters.Add("ArgumentList", argumentList);
}
アプローチ 3 を使用しているため、ブロックされず、作業を続行できます。
しかし、アプローチ1または2が機能しない理由はまだわかりません。アプローチ1または2を機能させれば、名前付きパラメーターをターゲットマシンに渡すのがおそらく簡単になると思います。
つまり、Musaab が述べたように、対話モードでのみ enter/import-session コマンドレットを使用できますか?
それがまさに私の質問です-なぜプログラムでそれらを使用できないのですか? 私ならどうすればいいですか?