2015-10-27 57 views
0

我试图运行PowerShell脚本使用C#使用this link作为参考。

到目前为止我有:

try 
    { 
     using (PowerShell PowerShellInstance = PowerShell.Create()) 
     { 
      PowerShellInstance.AddCommand(scriptPath);      
      var PSOutput = PowerShellInstance.Invoke(); 
      if (PowerShellInstance.Streams.Error.Count > 0) 
      { 
       foreach (var line in PowerShellInstance.Streams.Error) 
       { 
         Console.WriteLine(line); 
       } 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 

这使抛出一个异常:

“AuthorizationManager检查失败。”

内部异常:,提示用户的命令失败,因为 主机程序或命令 类型不支持用户交互。主机试图通过以下消息尝试 请求确认:仅运行您信任的脚本 。虽然来自互联网的脚本可能很有用,但此脚本 可能会损害您的计算机。如果您信任此脚本,请使用 Unblock-File cmdlet来允许脚本在没有此警告 消息的情况下运行。你想运行C:\ PowerShellScripts \ MyScript.ps1吗?

所以看着Exception我可以看到它是要求我确认脚本,但没有用户交互的窗口,因此是例外。

所以我开始寻找如何停止的确认文字,发现Powershell New-Item: How to Accept Confirmation Automatically

但即使加:

PowerShellInstance.AddScript("$ConfirmPreference = \"None\""); 
PowerShellInstance.Invoke(); 

执行我的脚本没有工作之前。那么是否有一种方法可以使用C#为我的PowerShell实例设置$ConfirmPreference = "None"

回答

1

我认为这与执行政策有关。您可以使用Cmdlet Get-ExecutionPolicy查询执行策略。您可以:执行政策(例如)

  1. 变化:使用Set-ExecutionPolicy Unrestricted
  2. “无限制”的
  3. 运行脚本通过运行powershell.exe -ExecutionPolicy Bypass C:\PowerShellScripts\MyScript.ps1
  4. 通过使用该cmdlet Unblock-File C:\PowerShellScripts\MyScript.ps1
  5. 疏通脚本
+0

我的执行策略已经是'Unrestricted'。我认为问题更多的是因为'ConfirmationPreference'更多的信息发现[Here](http://blogs.msdn.com/b/powershell/archive/2006/12/15/confirmpreference.aspx) – user1

+0

这些文件被阻止“虽然和手动通过和解除他们的工作。我也会自动化这个。谢谢! – user1