如何在C#中管理Powershell命令

时间:2014-09-25 14:00:34

标签: c# powershell-v2.0

我在Powershell 2中有一组命令,其中一个函数的输出是下一个函数的输入,但是在第一个函数的输出中,我可以从结果中选择一个值,该值是输入的值。下一个功能。

例如

Get-RDUserSession | ? {$_.username -eq "myuser"} | Disconnect-User

我的例子,我选择了一个名为“myuser”的用户,并将此用户传递给一个名为Disconnect-User的函数来执行某些操作。所有这些都在Powershell中工作,但我希望能够在C#中复制它,而无需编写多行代码。

是否可以像在Powershell中一样在C#中重现这个?

2 个答案:

答案 0 :(得分:0)

当然,你最终会得到类似的东西(多线以使它在SO上更具可读性;虽然我也更喜欢在现实生活中像我那样格式化我的代码):

GetRDUserSessionMethod().Where(u => u.username == "myuser")
                        .ToList()
                        .ForEach(DisconnectUser);

GetRDUserSessionMethod()只需返回IEnumerable<SomeUserClass>

ToList()是必需的,因为MS从未决定在IEnumerable<T>上有这样的扩展方法,由于各种原因(类型安全!)将是该语言的一个很好的补充。如果你想避免每次都做ToList()这个快速而肮脏的例子,那么自己写一个是非常简单的:

public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
    foreach (T element in source)
    { 
        action(element);
    }
}

关于这是否比常规foreach { }声明更具可读性,可以进行一些讨论 - 可能与开发人员的意见一样多。就个人而言,我编写这样的代码没有问题。

答案 1 :(得分:0)

command1&amp;&amp;命令2

假设使用c#

重新启动名为“XYZ”的服务

net stop“XYZ”&amp;&amp;净开始“XYZ”

代码示例是,

using (Process command = new Process())
{        
    command.StartInfo = new ProcessStartInfo
    {
        CreateNoWindow = true,
        FileName = CommonStrings.RestartProccesCommand,
        Arguments = COMMAND1 && COMMAND2,
        LoadUserProfile = false,
        UseShellExecute = false,
        WindowStyle = ProcessWindowStyle.Hidden,
    };
    command.Start();
    command.WaitForExit(3000);
    exitCode = command.ExitCode;
}