Ich versuche, ein invoke-Befehl Cmdlet mit C# auszuführen, aber ich kann nicht die richtige Syntax herausfinden. Ich will nur diesen einfachen Befehl auszuführen:Remote-Powershell-Befehl von C rufen #
invoke-command -ComputerName mycomp.mylab.com -ScriptBlock {"get-childitem C:\windows"}
In C# -Code, ich folgendes getan:
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
}
Als ich das laufen, bekomme ich eine Ausnahme:
Cannot bind parameter 'ScriptBlock'. Cannot convert the "get-childitem C:\windows" value of type "System.String" to type "System.Management.Automation.ScriptBlock".
Ich schätze, ich muss hier den ScriptBlock-Typ verwenden, weiß aber nicht, wie. Dies ist nur ein einfaches Beispiel, mit dem Sie beginnen sollten. Der wirkliche Anwendungsfall würde darin bestehen, einen größeren Skriptblock mit mehreren Befehlen auszuführen, so dass jede Hilfe, wie dies getan wird, sehr geschätzt wird.
Dank
ah schön, spart mich ein explizites Filterobjekt aus machen, dank – NullPointer