从C#代码触发PS1文件。 C#代码必须用exe包装

时间:2017-08-10 03:29:30

标签: c# powershell exe

我有一个PowerShell脚本,我想从EXE触发。

已经尝试或不能做的事情:

  • 不能直接运行powershell,因为运行它的进程需要exe而不是PowerShell。
  • Powershell脚本非常复杂,因此将其移植到C#并不是一件容易的事情,而且非常耗时。
  • PS2EXE有效,但由于安全策略无法使用。
  • 尝试谷歌如何为ps1文件创建一个exe,但无法找到任何解决方案(ps2exe除外)。所以我决定尝试使用C#执行ps1,然后创建一个exe。然后将exe和powershell包装在同一个msi中。

通过简单地创建Process并启动它来尝试:

        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("powershell.exe");
        p.StartInfo.Arguments = @"-Executionpolicy unrestricted C:\script\ms.ps1";
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        p.Start();

上面的代码正在运行,但它会闪烁黑色cmd窗口一毫秒左右。

尝试使用以下源代码:https://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C

        string scriptText = System.IO.File.ReadAllText(@"C:\script\ms.ps1");
        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();
        Pipeline pipeline = runspace.CreatePipeline();
        pipeline.Commands.AddScript(scriptText);

        pipeline.Commands.Add("Out-String");

        pipeline.Invoke();
        runspace.Close();

与上述问题相同,闪烁黑色窗户几秒钟。

回答以下任何问题都可以解决我的问题?

  1. 如何在不使用PS2EXE的情况下为powershell创建exe?
  2. 如何在从C#代码调用PowerShell时禁用Windows弹出窗口?
  3. 还有其他方法可以解决我的问题吗?
  4. - 感谢

1 个答案:

答案 0 :(得分:0)

  

您好!您可以选择" Windows应用程序"而是在项目属性中   控制台   enter image description here

     

也许它可以帮助你:/闪烁黑色cmd windows /

     

此外,您可以在不运行脚本的情况下运行命令(类似于   此):

string MyCommand = "-Command &{ if (!(Test-Path 'c:\\test')) {md 'c:\\test'; get-process | Out-File c:\\test\\MyFile.txt}}";

            ProcessStartInfo MyProcInfo = new ProcessStartInfo();


            MyProcInfo.FileName = "powershell.exe";
            MyProcInfo.Arguments = MyCommand;

            Process MyProcess = new Process();
            MyProcess.StartInfo = MyProcInfo;
            MyProcess.Start();
            MyProcess.WaitForExit();