我尝试从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 not be recognized命令的例外。 我可以使用C#中的whatif
答案 0 :(得分:3)
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();
答案 1 :(得分:1)
Whatif是一个参数,而不是命令。请改用AddParameter
方法:
http://msdn.microsoft.com/en-us/library/dd182433(v=vs.85).aspx