如何为PowerShell实例设置$ ConfirmPreference =“None”?

时间:2015-10-27 11:31:11

标签: c# powershell

我正在尝试使用PowerShell使用this link作为参考来运行C#脚本。

到目前为止,我有:

  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检查失败。”

     

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

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

所以我开始研究如何停止确认文本并找到Powershell New-Item: How to Accept Confirmation Automatically

但即使添加:

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

在执行我的脚本之前不起作用。那么有没有办法使用$ConfirmPreference = "None"为我的PowerShell实例设置C#

2 个答案:

答案 0 :(得分:1)

我认为它与执行政策有关。您可以使用Cmdlet Get-ExecutionPolicy查询执行策略。你可以:

  1. 将执行政策更改为(例如):" Unrestricted"通过 使用Set-ExecutionPolicy Unrestricted
  2. 运行powershell.exe -ExecutionPolicy Bypass C:\PowerShellScripts\MyScript.ps1
  3. 来运行您的脚本
  4. 使用Cmdlet Unblock-File C:\PowerShellScripts\MyScript.ps1
  5. 取消阻止脚本

答案 1 :(得分:1)

虽然接受的答案解决了此特定问题,但设置$ConfirmImpact首选项变量的正确方法是通过会话状态:

var sessionState = InitialSessionState.CreateDefault();
sessionState.Variables.Add(new SessionStateVariableEntry("ConfirmPreference", ConfirmImpact.None, ""));

using (PowerShell shell = PowerShell.Create(sessionState))
{
    // execute commands, etc
}

(这是来自Google搜索结果的访问者)