如何使用多个命令创建.ps1文件和Set-ExecutionPolicy Unrestricted -force?

时间:2015-11-17 22:41:12

标签: c# powershell command administrator

var newProcessInfo = new System.Diagnostics.ProcessStartInfo();
newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe";
newProcessInfo.Verb = "runas";
newProcessInfo.Arguments = @"-executionpolicy unrestricted -Command ""C:\Windows\system32\sfc.exe /scannow""";


/*
newProcessInfo.Arguments = @"-Command ""sfc /scannow""";
newProcessInfo.Arguments = @"-File ""C:\my\script.ps1""";
newProcessInfo.Arguments = @"–ExecutionPolicy Bypass -File ""C:\my\script.ps1"""; */

这些基本上是我想要使用的基本样式代码命令。我一直有问题 - 执行政策不受限制。如上所述,当我在powershell中输入它时效果很好。

另外,在PowerShell到cmd.exe / k的可比编码是什么,所以命令提示符窗口保持打开以进行故障排除?

2 个答案:

答案 0 :(得分:1)

在看到您的错误后,我可以肯定地说,您正在运行的sfc命令发生了该错误。该命令正在执行。

执行策略是关于如何处理脚本文件的,因此它对立即运行的命令没有影响(除非您在命令中引用脚本文件)。我担心这对你的特定问题没有帮助。

是什么让您认为您的执行政策无效?

由于您未在未注释的代码中使用-File参数,因此执行策略应无关紧要。

cmd.exe /k的类似powershell命令是powershell.exe -NoExit

答案 1 :(得分:0)

Answer found on Stackoverflow(click here)

...
using System.Diagnostics;
...

private void button4_Click(object sender, EventArgs e)
{
    string docs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    string snat = Environment.GetEnvironmentVariable("windir") + @"\sysnative\sfc.exe";

    Process a = new Process();
      a.StartInfo.FileName = snat;
      a.StartInfo.Arguments = "/SCANNOW";
      a.StartInfo.UseShellExecute = false;
      a.StartInfo.RedirectStandardOutput = true;
      a.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      a.StartInfo.CreateNoWindow = true;
    a.Start();

    string output = a.StandardOutput.ReadToEnd();
    a.WaitForExit();

    MessageBox.Show("DONE!");
}
catch
{
MessageBox.Show("error!");
}