如何设置$ConfirmPreference=“”;无”;PowerShell实例

本文关键字:实例 PowerShell ConfirmPreference 何设置 设置 | 更新日期: 2023-09-27 18:19:29

我正在尝试使用C#运行PowerShell脚本,并使用此链接作为引用。

到目前为止,我得到了:

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

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

因此,通过查看Exception,我可以看到它要求我确认脚本,但没有供用户交互的窗口,因此出现了异常。

所以我开始研究如何停止确认文本,并找到了Powershell新项目:如何自动接受确认

但即使添加:

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

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

如何设置$ConfirmPreference=“”;无”;PowerShell实例

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

var sessionState = InitialSessionState.CreateDefault();
sessionState.Variables.Add(new SessionStateVariableEntry("ConfirmPreference", ConfirmImpact.None, ""));
using (PowerShell shell = PowerShell.Create(sessionState))
{
    // execute commands, etc
}

(这是为来自谷歌搜索结果的访问者提供的)

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

  1. 将执行策略更改为(例如):"无限制"使用Set-ExecutionPolicy Unrestricted
  2. 通过运行powershell.exe -ExecutionPolicy Bypass C:'PowerShellScripts'MyScript.ps1
  3. 使用Cmdlet Unblock-File C:'PowerShellScripts'MyScript.ps1取消阻止脚本