首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C#向控制台发出Powershell命令

从C#向控制台发出Powershell命令
EN

Stack Overflow用户
提问于 2016-08-09 03:12:00
回答 2查看 809关注 0票数 0

在使用C#应用程序打开powershell控制台后,我无法向它发送命令。我还尝试了其他方法,我在代码底部注释掉了这些方法,以向您展示我所尝试的内容。下面是我使用的代码:

代码语言:javascript
复制
Using System;
Using System.Windows.Forms;
Using System.Management.Automation;

System.Diagnostics.Process CMDprocess = new System.Diagnostics.Process();
var StartProcessInfo = new System.Diagnostics.ProcessStartInfo();
StartProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowershell\v1.0\powershell.exe";
StartProcessInfo.Verb = "runas";

CMDprocess.StartInfo = StartProcessInfo;

CMDprocess.Start();

StartProcessInfo.Arguments = @"C:\Users\user\Desktop\Test.ps1";

CMDprocess.WaitForExit();

//Console.WriteLine("@C:\\Users\\User\\Desktop\\Test.ps1");
//StreamWriter SW = CMDprocess.StandardInput;
//StreamReader SR = CMDprocess.StandardOutput;
//SW.WriteLine(@"C:\Users\User\Desktop\Test.ps1");                
//StartProcessInfo.Arguments = @".\Test.ps1";
//System.Diagnostics.Process.Start(StartProcessInfo);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-09 03:28:42

@ChrisDent提出了一个很好的解决方案。

但是,代码中唯一的错误是,您必须在启动powershell之前设置StartInfo。试试这个:

代码语言:javascript
复制
System.Diagnostics.Process CMDprocess = new System.Diagnostics.Process();
var StartProcessInfo = new System.Diagnostics.ProcessStartInfo();
StartProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowershell\v1.0\powershell.exe";
StartProcessInfo.Verb = "runas";
StartProcessInfo.Arguments = @"C:\Users\user\Desktop\Test.ps1";

CMDprocess.StartInfo = StartProcessInfo;
CMDprocess.Start();           
CMDprocess.WaitForExit();
票数 1
EN

Stack Overflow用户

发布于 2016-08-09 03:23:31

为什么不直接与PowerShell交互呢?

例如,这个简单的示例执行GetProcess命令并返回输出集合。有很多方法可以改进这一点,当然,这里只是一个简单的例子。

代码语言:javascript
复制
using System.Management.Automation;
using System.Collections.ObjectModel;

public class Test
{
    public static Collection<PSObject> RunCommand()
    {
        PowerShell psHost = PowerShell.Create();
        Collection<PSObject> output = psHost.AddCommand("Get-Process").AddArgument("powershell").Invoke();

        if (psHost.HadErrors)
        {
            foreach (ErrorRecord error in psHost.Streams.Error)
            {
                throw error.Exception;
            }
            return null;
        }
        else
        {
            return output;
        }
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38836847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档