【问题标题】:How do I set $ConfirmPreference = "None" for a PowerShell instance?如何为 PowerShell 实例设置 $ConfirmPreference = "None"?
【发布时间】:2019-11-15 21:17:47
【问题描述】:

我正在尝试使用C# 运行PowerShell 脚本,并使用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 检查失败。”

内部异常:提示用户失败的命令,因为 宿主程序或命令 type 不支持用户交互。主机试图 使用以下消息请求确认:仅运行符合以下条件的脚本 你信任。虽然来自 Internet 的脚本很有用,但此脚本 可能会损害您的计算机。如果您信任此脚本,请使用 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"

【问题讨论】:

    标签: c# powershell


    【解决方案1】:

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

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

    (这是针对从 Google 搜索结果来到这里的访问者)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我的执行策略已经是Unrestricted。我认为问题更多在于ConfirmationPreference 找到的更多信息Here
      • 这些文件是Blocked,但手动通过并解除阻止它们有效。我也会自动化这个。谢谢!
      • @User1 “这里”链接不见了……
      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多