I\'m trying to run an invoke-command cmdlet using C# but I can\'t figure out the right syntax. I just want to run this simple command:
invoke-command -Comput
You use short format:
ps.AddParameter("ScriptBlock", ScriptBlock.Create("Get-childitem C:\\Windows"));
An alternative approach in case it maybe more appropriate in some cases.
var remoteComputer = new Uri(String.Format("{0}://{1}:5985/wsman", "HTTP", "ComputerName"));
var connection = new WSManConnectionInfo(remoteComputer, null, TopTest.GetCredential());
var runspace = RunspaceFactory.CreateRunspace(connection);
runspace.Open();
var powershell = PowerShell.Create();
powershell.Runspace = runspace;
powershell.AddScript("$env:ComputerName");
var result = powershell.Invoke();
https://blogs.msdn.microsoft.com/schlepticons/2012/03/23/powershell-automation-and-remoting-a-c-love-story/
A scriptblock string should match the format as "{ ... }".Use the follow code will be ok:
ps.AddParameter("ScriptBlock", "{ get-childitem C:\\windows }");
Ah, the parameter to ScriptBlock itself needs to be of type ScriptBlock.
full code:
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");
ScriptBlock filter = ScriptBlock.Create("Get-childitem C:\\windows");
ps.AddParameter("ScriptBlock", filter);
foreach (PSObject obj in ps.Invoke())
{
// Do Something
}
Putting the answer here if someone finds it useful in the future