我正在尝试使用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#
?
答案 0 :(得分:1)
我认为它与执行政策有关。您可以使用Cmdlet Get-ExecutionPolicy
查询执行策略。你可以:
Set-ExecutionPolicy Unrestricted
或powershell.exe -ExecutionPolicy Bypass C:\PowerShellScripts\MyScript.ps1
或Unblock-File C:\PowerShellScripts\MyScript.ps1
答案 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搜索结果的访问者)