C#获取PsIntacctSdk的PowerShell查询结果及相关配置问题
你对返回对象类型的判断是正确的,目标PowerShell脚本的查询结果就是Intacct.SDK.Xml.OnlineResponse类型的实例。
疑问1:如何编写表达式将该PowerShell的查询结果存入C#变量
你需要先通过NuGet安装Microsoft.PowerShell.SDK以及Intacct SDK相关依赖,之后可以参考以下代码实现结果获取:
using System.Management.Automation; using Intacct.SDK.Xml; // 初始化PowerShell运行实例 using var ps = PowerShell.Create(); // 读取并加载Ps1脚本,将路径替换为你实际的脚本路径 ps.AddScript(File.ReadAllText(@"Find-IntacctSdkObject.ps1")); // 给命令传入对应参数,根据实际需求替换参数名和参数值 ps.AddCommand("Find-IntacctSdkObject") .AddParameter("ObjectType", "你的查询对象类型") .AddParameter("Fields", new []{"字段1","字段2"}); // 执行命令获取结果 var psOutput = ps.Invoke(); // 处理执行错误 if (ps.HadErrors) { foreach (var error in ps.Streams.Error) { Console.WriteLine($"执行错误:{error}"); } return; } // 转换为强类型结果存入results变量 List<OnlineResponse> results = psOutput.Select(p => (OnlineResponse)p.BaseObject).ToList();
疑问2:要让Visual Studio识别"PowerShell"对象无报错,是否必须安装PowerShell Tool扩展?该扩展为什么是试用版?
不需要安装该试用版扩展。
C#代码中调用PowerShell的唯一编译依赖是Microsoft.PowerShell.SDK这个NuGet包,安装后即可正常识别PowerShell类及相关对象,无编译报错。
你看到的PowerShell Tool扩展是第三方提供的开发辅助工具,主要用于PowerShell脚本的语法高亮、单步调试等功能,和C#项目的编译依赖无关,试用版是该扩展的商业收费规则导致的,和微软官方SDK无关。
疑问3:是否直接创建如图所示的ps1代码文件加入C#解决方案即可?
可以直接创建ps1文件加入C#解决方案。
你只需要在ps1文件的「属性」面板中,将「复制到输出目录」选项设置为「如果较新则复制」,编译项目时脚本会自动同步到程序输出目录,你就可以通过相对路径直接读取加载脚本,不需要手动处理文件路径映射。
PowerShell代码在C#解决方案中的运行逻辑
C#项目中运行PowerShell代码的本质是通过官方PowerShell SDK在当前进程内启动一个独立的PowerShell运行时环境,加载你指定的脚本和命令执行,执行完成后PowerShell侧的返回对象会被封装为PSObject实例返回给C#层,你可以通过BaseObject属性获取原始类型实例,也可以通过Members集合动态读取对象属性。
内容的提问来源于stack exchange,提问作者Java
相关产品推荐
相关产品推荐

