从C#执行powershell命令
本文关键字:命令 powershell 执行 | 更新日期: 2023-09-27 18:00:46
我试图从C#执行这个powershell命令
gci C:'Ditectory -Recurse | unblock-file -whatif
使用此代码
Runspace space = RunspaceFactory.CreateRunspace();
space.Open();
space.SessionStateProxy.Path.SetLocation(directoryPath);
Pipeline pipeline = space.CreatePipeline();
pipeline.Commands.Add("get-childitem");
pipeline.Commands.Add("Unblock-File");
pipeline.Commands.Add("-whatif");
var cresult = pipeline.Invoke();
space.Close();
我一直收到一个关于whatif不被识别命令的异常。我可以使用C#中的whatif吗
WhatIf
是一个参数,而不是命令,因此应将其添加到Unblock-File
的命令对象的Parameters集合中。然而,由于API从Commands.Add
返回void,这一点变得很尴尬。我建议使用一小组辅助扩展方法,这将允许您使用类似生成器的语法:
internal static class CommandExtensions
{
public static Command AddCommand(this Pipeline pipeline, string command)
{
var com = new Command(command);
pipeline.Commands.Add(com);
return com;
}
public static Command AddParameter(this Command command, string parameter)
{
command.Parameters.Add(new CommandParameter(parameter));
return command;
}
public static Command AddParameter(this Command command, string parameter, object value)
{
command.Parameters.Add(new CommandParameter(parameter, value));
return command;
}
}
那么你的代码很简单:
pipeline.AddCommand("Get-ChildItem").AddParameter("Recurse");
pipeline.AddCommand("Unblock-File").AddParameter("WhatIf");
var results = pipeline.Invoke();
space.Close();
AddParameter
方法:
http://msdn.microsoft.com/en-us/library/dd182433(v=vs.85).aspx