如何设置$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"
?
虽然接受的答案解决了这个特定的问题,但设置$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
查询执行策略。您可以:
- 将执行策略更改为(例如):"无限制"使用
Set-ExecutionPolicy Unrestricted
或 - 通过运行
powershell.exe -ExecutionPolicy Bypass C:'PowerShellScripts'MyScript.ps1
或 - 使用Cmdlet
Unblock-File C:'PowerShellScripts'MyScript.ps1
取消阻止脚本