c# - 在 C# 中创建和使用 PowerShell 对象引用
问题描述
我需要实例化一个新对象并将其传递给这样的命令输入:
using (var pipeline = runspace.CreatePipeline())
{
// Create configuration object
pipeline.Commands.AddScript(
"$eap = New-EapConfiguration -UseWinlogonCredential");
var cmd = new Command("Add-VpnConnection");
// Set connection settings...
cmd.Parameters.Add(new CommandParameter(
"EapConfigXmlStream", "$eap.EapConfigXmlStream"));
pipeline.Commands.Add(cmd);
pipeline.Invoke();
}
结果:
无法在“System.Xml.XmlDocument”对象类型中转换“$eap.EapConfigXmlStream”...
$eap.EapConfigXmlStream
被解释为string
,而不是对象引用
欢迎任何建议
编辑:
@JohnB:这个 PS 命令有效:
Set-VpnConnection -Name "MyVpnConnection"
-EapConfigXmlStream (New-EapConfiguration -UseWinlogonCredential).EapConfigXmlStream
但是这个 C# 替换不起作用:
cmd.Parameters.Add(new CommandParameter("EapConfigXmlStream",
"(New-EapConfiguration -UseWinlogonCredential).EapConfigXmlStream"));
(New-EapConfiguration -UseWinlogonCredential).EapConfigXmlStream
解释为string
解决方案
它应该像这样工作。
CommandParameter(String, Object)需要一个对象,但您传递了一个字符串"EapConfigXmlStream", "$eap.EapConfigXmlStream"
而是传递一个 PSObject:
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Collection<PSObject> configXML;
using (var pipeline = runspace.CreatePipeline())
{
pipeline.Commands.AddScript(
"(New-EapConfiguration -UseWinlogonCredential).EapConfigXmlStream");
configXML = pipeline.Invoke();
}
using (var pipeline = runspace.CreatePipeline())
{
var cmd = new Command("Add-VpnConnection");
cmd.Parameters.Add(new CommandParameter(
"EapConfigXmlStream", configXML[0]));
pipeline.Commands.Add(cmd);
pipeline.Invoke();
}
推荐阅读
- javascript - How to sum nested arrays in JavaScript
- python - 如果两者都满足条件,则按 ID 删除重复的行
- angular - Angular Material Datepicker - full month name
- google-earth-engine - 谷歌地球引擎 - 可变为波段范围
- python - Python - 从 txt 中读取空格和 | 的行 分隔以将值添加到列表
- report - NetSuite 按 Bin 列出的项目列表
- multidimensional-array - 如何获取具有动态形状的 Rust ndarray 切片?
- python - Python:模块在传递给 exec(...) 的代码块中从范围中丢失
- python - 使用python获取焦点窗口的进程名称
- javascript - 从 Asp.Net Core/Blazor 或 JS 启动桌面 exe 应用程序