C# PowerShell变量和C

C# PowerShell变量和C,c#,variables,powershell,office365,C#,Variables,Powershell,Office365,我正在用C编写Office 365插件,并尝试使用以下PowerShell命令: $newLicense = New-MsolLicenseOptions -AccountSkuId example:ENTERPRISEPACK -DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE Set-MsolUserLicense -UserPrincipalName test@example.com -AddLicenses "exa

我正在用C编写Office 365插件,并尝试使用以下PowerShell命令:

$newLicense = New-MsolLicenseOptions -AccountSkuId example:ENTERPRISEPACK -DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE
Set-MsolUserLicense -UserPrincipalName test@example.com -AddLicenses "example:ENTERPRISEPACK" -LicenseOptions $newLicense
在PS中,这很有效。在C语言中,我无法运行此命令。 这是我的C代码,来自课堂:

我试过很多方法:

scriptText_ = "$newLicense = New-MsolLicenseOptions -AccountSkuId {1} -DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE\n"+
"Set-MsolUserLicense -UserPrincipalName test@example.com -AddLicenses \"example:ENTERPRISEPACK\" -LicenseOptions $newLicense");
我使用以下方法来执行其他工作正常的命令:

_invoker.Invoke(scriptText_);
而且:

var pipeline = _runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText_);
return pipeline.Invoke(); // and getting back the variable
我还尝试在运行空间对象中添加变量:

_runspace.SessionStateProxy.SetVariable ("newLicense", pipeline.Invoke());
但是该命令不起作用,并且不返回任何错误。 我不太了解PowerShell环境,我是这方面的初学者


提前感谢您提供的所有帮助。

我怀疑您遇到了PowerShell引擎未向您显示的错误。尝试此方法来观察非终止错误:

var ps = PowerShell.Create();
ps.AddScript(@"Get-ChildItem c:\xyzzy");
var results = ps.Invoke();
if (ps.HadErrors)
{
    foreach (var errorRecord in ps.Streams.Error)
    {
        Console.WriteLine(errorRecord);
    }
}
foreach (var result in results)
{
    Console.WriteLine(result);
}

我怀疑您遇到了PowerShell引擎未显示的错误。尝试此方法来观察非终止错误:

var ps = PowerShell.Create();
ps.AddScript(@"Get-ChildItem c:\xyzzy");
var results = ps.Invoke();
if (ps.HadErrors)
{
    foreach (var errorRecord in ps.Streams.Error)
    {
        Console.WriteLine(errorRecord);
    }
}
foreach (var result in results)
{
    Console.WriteLine(result);
}

您是否尝试过将变量写入PowerShell命令的输出,然后读取调用的输出?这将有助于您确定变量是否进入脚本。到PS命令的输出?请你说清楚一点好吗?我尝试从命令中获取PSObject,但没有变量,它可以工作。我有我的LicenseOption对象。因此,我尝试直接将其添加为参数,如下所示:var cmd=new CommandNew msollicensepoptions-AccountSkuId示例:enterpriseepack-DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE,true;cmd.Parameters.AddvariableName,variableValue;pipeline.Commands.Addcmd;var result=pipeline.Invoke;但它失败了。我真的不明白C如何正确处理变量和参数。顺便说一句,我的意思是在调用的命令中放入$myVariable并检查返回的正确值,即确认SetVariable正在工作。调试:当您的工具受到限制时,或者您假设某个工具正在工作,而它不工作时,后者最有可能出现。您是否尝试过将变量写入PowerShell命令的输出,然后读取调用的输出?这将有助于您确定变量是否进入脚本。到PS命令的输出?请你说清楚一点好吗?我尝试从命令中获取PSObject,但没有变量,它可以工作。我有我的LicenseOption对象。因此,我尝试直接将其添加为参数,如下所示:var cmd=new CommandNew msollicensepoptions-AccountSkuId示例:enterpriseepack-DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE,true;cmd.Parameters.AddvariableName,variableValue;pipeline.Commands.Addcmd;var result=pipeline.Invoke;但它失败了。我真的不明白C如何正确处理变量和参数。顺便说一句,我的意思是在调用的命令中放入$myVariable并检查返回的正确值,即确认SetVariable正在工作。调试:当你的工具被卡住时,或者你假设某个东西在工作,而它没有工作,后者很可能是。