【发布时间】:2021-08-31 06:56:27
【问题描述】:
C#代码: C#代码无法调用powershell脚本中存在的函数Trial2,尽管它之前正在执行。
StringBuilder sb = new StringBuilder();
PowerShell psExec = PowerShell.Create();
psExec.AddScript(@ "C:\Users...\sc.ps1");
psExec.AddCommand("Trial2").AddParameter("a", "Ram");
Collection < PSObject > results;
Collection < ErrorRecord > errors;
results = psExec.Invoke();
errors = psExec.Streams.Error.ReadAll();
if (errors.Count > 0) {
foreach(ErrorRecord error in errors) {
sb.AppendLine(error.ToString());
}
} else {
foreach(PSObject result in results) {
sb.AppendLine(result.ToString());
}
}
Console.WriteLine(sb.ToString());
Powershell 脚本:
function Trial2($a){
"Yes! $a";
}
我在 Powershell 中也将 Set-ExecutionPolicy 设置为 Unrestricted。
提前致谢!
【问题讨论】:
-
您可以尝试“Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine”...它将适用于所有用户并且在没有配置文件的情况下运行
-
将
psExec.AddScript("Set-ExecutionPolicy")更改为psExec.AddCommand("Set-ExecutionPolicy"),然后在下一行调用AddScript(...)之前调用AddStatement()。 -
另外,请不要将错误发布为图片,请
-
将
psExec.AddScript(@"C:\Users...\sc.ps1")更改为psExec.AddScript(@ ". 'C:\Users...\sc.ps1'")(注意前面的.)——这将点源脚本而不是仅仅在它自己的范围内执行它
标签: c# windows powershell