从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吗

从C#执行powershell命令

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();
Whatif是一个参数,而不是一个命令。请尝试AddParameter方法:

http://msdn.microsoft.com/en-us/library/dd182433(v=vs.85).aspx