我正在尝试从C#代码运行PowerShell脚本,但我遇到了一些(可能是环境)问题:
在我尝试运行它的机器上,会发生以下情况:
Set-ExecutionPolicy:Windows PowerShell已成功更新执行策略,但该设置被更具体范围内定义的策略覆盖.由于覆盖,您的shell将保留其当前有效的RemoteSigned执行策略.键入"Get-ExecutionPolicy -List"以查看执行策略设置.有关详细信息,请参阅"Get-Help Set-ExecutionPolicy".在行:1 char:46 + if((Get-ExecutionPolicy)-ne'AllSigned'){Set-ExecutionPolicy -Scope Process ... + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo:PermissionDenied :( :) [Set-ExecutionPolicy],SecurityException + FullyQualifiedErrorId:ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Unrestricted
UserPolicy Undefined
Process Bypass
CurrentUser Unrestricted
LocalMachine Unrestricted
Run Code Online (Sandbox Code Playgroud)我认为这是环境因素:
if (File.Exists("Start.ps1"))
{
string strCmdText = Path.Combine(Directory.GetCurrentDirectory(), "Start.ps1");
var process = System.Diagnostics.Process.Start(@"C:\windows\system32\windowspowershell\v1.0\powershell.exe ", strCmdText);
process.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)
脚本本身是无关紧要的,因为我已将其更改为简单
Write-Host "Hello"
$d=Read-Host
Run Code Online (Sandbox Code Playgroud)
我有同样的问题.
我有一个位于Program Files文件夹中并接受参数的脚本:verbose从其restart
文件夹运行它效果很好:
powershell ./<file.ps1> -verbose:$True -restart
Run Code Online (Sandbox Code Playgroud)
尝试使用完整路径运行它是我遇到问题的地方:
powershell & "C:\Program Files\Folder\<file.ps1> -verbose:$True -restart"
Run Code Online (Sandbox Code Playgroud)
上面的命令不运行脚本;相反,它会打开 PS 命令提示符,退出时会在记事本中打开脚本。
我还尝试将每个变量放在单独的引号中,但这效果不佳。
我找到了使用progra~1代替的解决方法Program Files,但我想以正确的方式解决问题。
我缺少什么?