PowerShell执行策略集,但从.Net程序调用时无法识别
我已经在VisualStudio中创建了一个小程序——一个带有按钮的表单,在单击时可以执行该程序——并构建了.exe 此程序应打开PowerShell并运行ps1文件 当我在调试模式下从VS内部运行它时,它可以正常运行ps1脚本而不会出错。 当我构建项目并以管理员身份运行exe时,它会短暂打开PowerShell,但会立即关闭 输出文件声明在此系统上禁用脚本的执行,但这是不正确的,因为我可以通过右键单击任意数量的PowerShell脚本并使用PowerShell运行它们来手动运行这些脚本 我尝试过将执行策略从Signed更改为AllSigned,以及Unrestricted,但没有帮助 这是我的密码:PowerShell执行策略集,但从.Net程序调用时无法识别,powershell,Powershell,我已经在VisualStudio中创建了一个小程序——一个带有按钮的表单,在单击时可以执行该程序——并构建了.exe 此程序应打开PowerShell并运行ps1文件 当我在调试模式下从VS内部运行它时,它可以正常运行ps1脚本而不会出错。 当我构建项目并以管理员身份运行exe时,它会短暂打开PowerShell,但会立即关闭 输出文件声明在此系统上禁用脚本的执行,但这是不正确的,因为我可以通过右键单击任意数量的PowerShell脚本并使用PowerShell运行它们来手动运行这些脚本 我尝试
if (File.Exists("LiveSiteTests.ps1"))
{
File.GetAttributes("LiveSiteTests.ps1");
string strCmdText = Path.Combine(Directory.GetCurrentDirectory(), "LiveSiteTests.ps1");
var process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = @"C:\windows\system32\windowspowershell\v1.0\powershell.exe";
process.StartInfo.Arguments = "\"&'" + strCmdText + "'\"";
process.Start();
string s = process.StandardOutput.ReadToEnd();
process.WaitForExit();
using (StreamWriter outfile = new StreamWriter("StandardOutput.txt", true))
{
outfile.Write(s);
}
}
通常情况下,您可以使用powershell.exe命令行上的参数
-ExecutionPolicy Bypass-File“d:\path\scriptfile.ps1”
来运行脚本。在提示下运行powershell/?
,以获取更多信息。这可能是32位对64位的问题吗?您是否在一个环境中设置了执行策略,而不是在另一个环境中设置了执行策略,然后调试与发布的可执行文件也以不同的模式执行?(您可能认为您总是使用C:\Windows\System32
路径引用同一个可执行文件,但情况更为复杂)。感谢您的回复。我没有想到32对64位,所以我会检查一下。我会更新,如果这解决了问题。