我正在使用C#中的Outlook执行VSTO加载项,调用PowerShell脚本与Office 365的Exchange Online进行交互。
通过计算机级别的不受限制的PowerShell执行策略,这一切都可以在我的Windows 10计算机上完美运行。但是,我无法在客户端的Windows 7计算机上运行它。
我认为有两个问题。第一个可能是他的Windows 7 PowerShell需要更新才能使用我的代码,第二个是我没有正确设置流程执行策略。这是我尽最大努力将执行策略设置为不受限制的方法(绕过会更好吗?)。
using (PowerShell PowerShellInstance = PowerShell.Create()) { StringBuilder OSScript = new StringBuilder("Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted;"); OSScript.Append(@"other really exciting stuff"); PowerShellInstance.AddScript(OSScript.ToString()); PowerShellInstance.Invoke(); }
有人可以指出正确的方向吗?我知道这是行不通的,就好像我将计算机策略设置为“限制”一样,其他真正令人兴奋的事情也不会发生,但是如果我将其设置为“非限制”,那么一切都会正常进行。
我刚刚创建了一个新的Console项目,并将其添加到Main中:
using (PowerShell PowerShellInstance = PowerShell.Create()) { string script = "Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted; Get-ExecutionPolicy"; // the second command to know the ExecutionPolicy level PowerShellInstance.AddScript(script); var someResult = PowerShellInstance.Invoke(); someResult.ToList().ForEach(c => Console.WriteLine(c.ToString())); Console.ReadLine(); }
即使没有以管理员身份运行代码,这对我来说也非常有效。我正在Windows 10和Powershell 5中使用Visual Studio 2015。
根据Powershell 4.0 Set-ExecutionPolicy和Powershell 5.0 Set-ExecutionPolicy,Set-ExecutionPolicy在Powershell 4和5中的工作方式相同。