如何从 C# 文件调试“调用”Powershell (ps1)
Posted
技术标签:
【中文标题】如何从 C# 文件调试“调用”Powershell (ps1)【英文标题】:How to debug "invoking" Powershell (ps1) from C# file 【发布时间】:2022-01-02 11:16:09 【问题描述】:我正在尝试从 C# Visual Studio 解决方案调用 Powershell 文件。
显然,在调试时,当它遇到调用 PS1 文件的行时,它似乎什么都不做。
我收到这条消息:
我在 C# 中有这些行:
using System.Management.Automation;
PowerShell ps = PowerShell.Create();
ps.AddScript(File.ReadAllText(@"C:\Users\Justin\source\repos\HttpTrigger_1119\HttpTrigger_1119\list.ps1")).Invoke();
但是,当断点到达下一行时,它并没有显示错误:
我的下一个尝试是在 ps1 文件中放置断点。
但是,它似乎甚至没有在 ps1 文件的断点处停止。
既然没有命中 ps1 文件中的断点,那么调用 PS1 文件时可能会丢失一些东西,不是吗?
从现有的两行中添加什么?
PowerShell ps = PowerShell.Create();
ps.AddScript(File.ReadAllText(@"C:\Users\Justin\source\repos\HttpTrigger_1119\HttpTrigger_1119\list.ps1")).Invoke();
【问题讨论】:
@rfmodulator 谢谢。它帮助我诊断问题。看来我可能没有从 ps1 文件中得到任何结果。 【参考方案1】:关于“如何调试...”的问题
重构你的代码:
PowerShell ps = PowerShell.Create();
ps.AddScript(File.ReadAllText(@"C:\Users\Justin\source\repos\HttpTrigger_1119\HttpTrigger_1119\list.ps1")).Invoke();
你可以在调试器中观察到的东西:
var ps1Script = File.ReadAllText(...);
var newPs = ps.AddScript(ps1Script);
var psResult = newPs.Invoke();
并逐步检查您的代码,以确保它按照您的预期进行。
【讨论】:
这正是我所做的。谢谢!以上是关于如何从 C# 文件调试“调用”Powershell (ps1)的主要内容,如果未能解决你的问题,请参考以下文章