-1

リモート マシンの 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 コマンドレットを使用できますか?

それがまさに私の質問です-なぜプログラムでそれらを使用できないのですか? 私ならどうすればいいですか?

4

1 に答える 1

0

PSSession はインタラクティブ モードでのみ機能するため、PSSession を作成してから、Invoke-Command を使用してそのセッションでコマンドを実行する必要があります。

于 2013-02-24T09:07:36.720 に答える