PowerShell variables and C#
本文关键字:and variables PowerShell | 更新日期: 2023-09-27 17:55:01
我正在使用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#代码,来自PowerShellInvoker类:
var iss = InitialSessionState.CreateDefault();
iss.ImportPSModule(new[] { MsOnline });
iss.ThrowOnRunspaceOpenError = true;
_runspace = RunspaceFactory.CreateRunspace(iss);
_runspace.Open();
_invoker = new RunspaceInvoke(_runspace);
我试过很多方法:
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对象中添加变量:
_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);
}