【问题标题】:Opening Windows Powershell through c#通过 c# 打开 Windows Powershell
【发布时间】:2019-04-01 08:56:39
【问题描述】:

我正在尝试通过 C# 代码打开 Powershell,最终目标是也通过 c# 编写命令行(不使用 powershell 脚本)。

我做了一些研究并想出了这个代码 sn-p,但由于某种原因它只是没有打开 Powershell。我需要更改哪些代码才能打开 Powershell?

//Opening Powershell
private void Execute()
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
};
Process pro = Process.Start(startInfo);
pro.WaitForExit();
Thread.Sleep(3000);
pro.Close();
}

【问题讨论】:

  • 编译器至少会抱怨两个错别字。您能否发布您的真实代码并解释“未打开”的含义?你有错误吗?
  • @nvoigt 原谅错别字 - 我更正了。我没有收到任何错误。我正在尝试打开 powershell 控制台。
  • 期望会发生什么?你能用简单的英语描述一下吗?
  • 您需要在此处发布您期望发生的事情。例如,您的语句“打开 powershell 控制台”可能意味着您希望出现一个窗口。但是,您已经说过“CreateNoWindow = true”,您正在尝试重定向所有输出。所以对我来说,这似乎是一场冲突。因此,您必须准确描述您期望在这里发生的事情。
  • 我想他想打开 powershell 控制台。删除此CreateNoWindow = true,

标签: c# windows powershell


【解决方案1】:

我玩过这个。也许还有其他一些方法可以做到这一点,但这也有效。由于您需要一些初始设置,我认为您需要使用EnvironmentVariables,如果您这样做,您还需要添加

startInfo.UseShellExecute = false;

所以一个可行的例子是

    static void Main(string[] args)
    {
        OpenPowerShell(@"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe");
    }

    static void OpenPowerShell(string path)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo(path);
        startInfo.UseShellExecute = false;
        startInfo.EnvironmentVariables.Add("RedirectStandardOutput", "true");
        startInfo.EnvironmentVariables.Add("RedirectStandardError", "true");
        startInfo.EnvironmentVariables.Add("UseShellExecute", "false");
        startInfo.EnvironmentVariables.Add("CreateNoWindow", "true");
        Process.Start(startInfo);
    }

或者如果你对另一个窗口没问题:

    static void Main(string[] args)
    {
        OpenPowerShell(@"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe");
    }

    static void OpenPowerShell(string path)
    {
        Process.Start(path);
    }

【讨论】:

  • 您的第一个示例由于某些原因无法正常工作,powershell 控制台未打开。第二个例子确实有效。但是只启动powershell不允许我通过c#在其中编写命令,对吧?因为我从未将 RedirectStandardOutput 设置为 true?
  • @as19aux 老实说,我玩这个的次数不多。我只是对这个问题感兴趣,所以我自己尝试了一下。我的理解是 - 您可以通过运行 Process.start(path) 打开一个新的 powershell 窗口,或者您可以传递变量并在运行时将命令提示符用作 powershell shell。不过不确定这是否完全正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多