Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的powershell获取var#_C#_Powershell - Fatal编程技术网

C# 从C中的powershell获取var#

C# 从C中的powershell获取var#,c#,powershell,C#,Powershell,我从C#在Powershell中运行了一个命令,需要读取变量的内容。我尝试了所有在线找到的解决方案,但迄今为止没有一个有效 这是我当前的代码(还包括一些“尝试”) 下面是已执行的powershell命令 $htmlOutput = C:\\Perso\\Websites\\FoyerRural\\.bin\\node.exe C:\\Perso\\Websites\\FoyerRural\\.bin\\mjmlFromString -c '****lots of content - MJML t

我从C#在Powershell中运行了一个命令,需要读取变量的内容。我尝试了所有在线找到的解决方案,但迄今为止没有一个有效

这是我当前的代码(还包括一些“尝试”)

下面是已执行的powershell命令

$htmlOutput = C:\\Perso\\Websites\\FoyerRural\\.bin\\node.exe C:\\Perso\\Websites\\FoyerRural\\.bin\\mjmlFromString -c '****lots of content - MJML template (xml-style markup)****'
如果我在powershell提示符中直接运行该命令,
$htmlOutput
var将获取其值,我可以通过调用

$htmlOutput

C#
powershell
类中有我错过的技巧吗?如何获取C#中powershell
htmlOutput
变量的值?

我以前从未这样做过,但似乎你不是唯一一个有此问题的人,请访问以下网址查看答案:


我以前从未这样做过,但似乎你不是唯一一个有这个问题的人,请查看以下地址的答案:


谢谢大家的帮助,你让我走上了正确的道路。这是最终的工作代码

var nodePath = HttpContext.Server.MapPath("~/.bin/node.exe");
var mjmlFromStringCmd = HttpContext.Server.MapPath("~/.bin/mjmlFromString");
var mjmlTemplate = System.IO.File.ReadAllText(HttpContext.Server.MapPath("~/.bin/test.mjml"));
var command = $"$htmlOutput = {nodePath} {mjmlFromStringCmd} -c '{mjmlTemplate}'";

var powerShell = PowerShell.Create();

powerShell.AddScript(command);
powerShell.Invoke();
// GetVariable returns an "object", that is in fact an array of PSObjec
var lines = ((object[]) powerShell.Runspace.SessionStateProxy.GetVariable("htmlOutput")).Cast<PSObject>();
// Agregate all returned PSObjec (each one of them being a line from the powershell output) and aggregate them into a string
output = t.Aggregate(output, (current, item) => current + item.BaseObject.ToString()); 
var nodePath=HttpContext.Server.MapPath(“~/.bin/node.exe”);
var mjmlFromStringCmd=HttpContext.Server.MapPath(“~/.bin/mjmlFromString”);
var mjmlTemplate=System.IO.File.ReadAllText(HttpContext.Server.MapPath(“~/.bin/test.mjml”);
var命令=$“$htmlOutput={nodePath}{mjmlFromStringCmd}-c'{mjmlTemplate}';
var powerShell=powerShell.Create();
powerShell.AddScript(命令);
powerShell.Invoke();
//GetVariable返回一个“对象”,实际上是PSObjec的数组
变量行=((对象[])powerShell.Runspace.SessionStateProxy.GetVariable(“htmlOutput”)).Cast();
//Agregate所有返回的PSObjec(它们中的每一个都是powershell输出的一行),并将它们聚合为一个字符串
output=t.Aggregate(output,(current,item)=>current+item.BaseObject.ToString());

花了很多脑筋,但确实有效

谢谢大家的帮助,你让我走上了正轨。这是最终的工作代码

var nodePath = HttpContext.Server.MapPath("~/.bin/node.exe");
var mjmlFromStringCmd = HttpContext.Server.MapPath("~/.bin/mjmlFromString");
var mjmlTemplate = System.IO.File.ReadAllText(HttpContext.Server.MapPath("~/.bin/test.mjml"));
var command = $"$htmlOutput = {nodePath} {mjmlFromStringCmd} -c '{mjmlTemplate}'";

var powerShell = PowerShell.Create();

powerShell.AddScript(command);
powerShell.Invoke();
// GetVariable returns an "object", that is in fact an array of PSObjec
var lines = ((object[]) powerShell.Runspace.SessionStateProxy.GetVariable("htmlOutput")).Cast<PSObject>();
// Agregate all returned PSObjec (each one of them being a line from the powershell output) and aggregate them into a string
output = t.Aggregate(output, (current, item) => current + item.BaseObject.ToString()); 
var nodePath=HttpContext.Server.MapPath(“~/.bin/node.exe”);
var mjmlFromStringCmd=HttpContext.Server.MapPath(“~/.bin/mjmlFromString”);
var mjmlTemplate=System.IO.File.ReadAllText(HttpContext.Server.MapPath(“~/.bin/test.mjml”);
var命令=$“$htmlOutput={nodePath}{mjmlFromStringCmd}-c'{mjmlTemplate}';
var powerShell=powerShell.Create();
powerShell.AddScript(命令);
powerShell.Invoke();
//GetVariable返回一个“对象”,实际上是PSObjec的数组
变量行=((对象[])powerShell.Runspace.SessionStateProxy.GetVariable(“htmlOutput”)).Cast();
//Agregate所有返回的PSObjec(它们中的每一个都是powershell输出的一行),并将它们聚合为一个字符串
output=t.Aggregate(output,(current,item)=>current+item.BaseObject.ToString());

花了很多脑筋,但确实有效

使用环境变量怎么样?你会怎么做?我查了一下,但找不到太多关于它的信息。。。我尝试将var初始化为
$global:htmlOutput
,但它没有改变任何东西。我尝试像以前一样获取var,并且在调用
GetVariable
时尝试在var名称之前添加
global:
。。。仍然获取空值:-/Reading/write环境变量在powershell和C#中都很简单。请参阅。您是否检查了powershell.Streams.Error内容?使用环境变量如何?您将如何执行此操作?我查了一下,但找不到太多关于它的信息。。。我尝试将var初始化为
$global:htmlOutput
,但它没有改变任何东西。我尝试像以前一样获取var,并且在调用
GetVariable
时尝试在var名称之前添加
global:
。。。仍然获取空值:-/Reading/write环境变量在powershell和C#中都很简单。请参阅。是否检查了powershell.Streams.Errorcontent?使用方法时,我得到一个返回空列表的ps.Invoke()。另一个不起作用(我正在尝试调试),所以我尝试了这两种方法,在这两种情况下,我都得到了一个包含0结果的列表:-/因此我没有C#方面的经验,我无法真正与您一起测试,但在该代码中设置了执行策略。这需要行政权利。可能以管理员身份运行代码?这是一个很长的过程当使用方法时,我得到一个ps.Invoke()返回一个空列表。另一个不起作用(我正在尝试调试),所以我尝试了这两种方法,在这两种情况下,我都得到了一个包含0结果的列表:-/因此我没有C#方面的经验,我无法真正与您一起测试,但在该代码中设置了执行策略。这需要行政权利。可能以管理员身份运行代码?这是不可能的