c# - 从内联 C# 调用 powershell 进程
问题描述
我有一个执行一些内联 C# 代码的 PowerShell 脚本,如下所示:
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp
[AnalyzeHelper.AnalyzeDirectories]::CheckPath("XXX")
在那个 C# 代码中,我想输出到我的 PowerShell 输出。所以在我的 C# 中,我实现了:
public static void CheckPath(string path)
{
WriteOutput("Begin CheckPath");
}
private static void WriteOutput(string text)
{
using (PowerShell powerShellInstance = PowerShell.Create())
{
powerShellInstance.AddCommand("Write-Host").AddParameter("string", text).Invoke();
}
}
但不幸的是,它不起作用。它实际上只是挂在调用调用中。
解决方案
事实证明,PowerShell 支持委托,因此解决方案非常简单。我是这样打电话的:
[Action[string]]$action = {param($message) Write-Host "$message"}
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp
[AnalyzeStringLibraries.AnalyzeStrings]::CheckPath("XXX", $action)
然后在 C# 中我可以这样做:
public static void CheckPath(string path, Action<string> writeToHost)
{
writeToHost("Begin CheckPath");
}
推荐阅读
- php - 如何显示 php myadmin 记录数
- python - 如何减少 OpenCV python 中的帧数?
- regex - RegEx 用于出现一个常量,后跟任何字符串,直到空格或字符串结尾
- c# - 添加文本的次数与文本中的字符数一样多
- c - 根据文件大小分配内存没有正确的数字?
- html - justify-content 和 flex-grow 被忽略
- python-3.x - 在 python 中加载 .db 文件时出现“没有这样的表”错误
- vba - 如何优化/加速此代码,以便我可以处理大数据集?
- r - 抑制 tm_shape() 函数的消息(来自 tmap 库)
- angular - 后续的属性声明必须有相同的类型错误:node_modules/@types/jquery/index.d.ts