10

C# を使用して呼び出しコマンド コマンドレットを実行しようとしていますが、正しい構文がわかりません。この単純なコマンドを実行したいだけです:

invoke-command -ComputerName mycomp.mylab.com -ScriptBlock {"get-childitem C:\windows"}

C# コードでは、次のことを行いました。

InitialSessionState initial = InitialSessionState.CreateDefault();
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddCommand("invoke-command");
ps.AddParameter("ComputerName", "mycomp.mylab.com");
ps.AddParameter("ScriptBlock", "get-childitem C:\\windows");
foreach (PSObject obj in ps.Invoke())
{
   // Do Something
}

これを実行すると、例外が発生します。

Cannot bind parameter 'ScriptBlock'. Cannot convert the "get-childitem C:\windows" value of type "System.String" to type "System.Management.Automation.ScriptBlock".

ここで ScriptBlock タイプをどこかで使用する必要があると思いますが、方法がわかりません。これは開始するための単純な例にすぎません。実際の使用例では、複数のコマンドを含むより大きなスクリプト ブロックを実行する必要があるため、これを行う方法についてのヘルプをいただければ幸いです。

ありがとう

4

4 に答える 4

3

スクリプトブロック文字列は、"{ ... }" の形式に一致する必要があります。次のコードを使用しても問題ありません。

ps.AddParameter("ScriptBlock", "{ get-childitem C:\\windows }");
于 2013-08-27T01:13:57.787 に答える