如何从 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)的主要内容,如果未能解决你的问题,请参考以下文章

Powershell:如何从 C# 代码中获取凭据?

无法从 C# 调用 Powershell 函数

如何附加调试器以从托管(C#)包装器进入本机(C++)代码?

从 C# 应用程序的脚本中调用 PowerShell 函数

如何在 C# 中运行 powershell 命令

从 C# 异常调用的 PowerShell AddCommand