2
我工作在C#在Office 365的插件,並試圖此PowerShell命令:PowerShell的變量和C#
$newLicense = New-MsolLicenseOptions -AccountSkuId example:ENTERPRISEPACK -DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE
Set-MsolUserLicense -UserPrincipalName [email protected] -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 [email protected] -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的命令的輸出,然後讀取'Invoke'的輸出? (這應該有助於識別變量是否進入腳本。) – Richard
要輸出PS命令嗎?你會更清楚嗎?我試圖從沒有變量的命令中獲取PSObject,它可以工作。我有我的「LicenseOption」對象。因此,我試圖直接將它作爲參數添加,如下所示:'var cmd = new Command(「New-MsolLicenseOptions -AccountSkuId example:ENTERPRISEPACK -DisabledPlans SHAREPOINTWAC,MCOSTANDARD,SHAREPOINTENTERPRISE」,true); cmd.Parameters.Add(variableName_,variableValue_); pipeline.Commands.Add(CMD); var result = pipeline.Invoke();'失敗。我真的不明白C#如何正確處理變量(和參數btw)。 – Gnial0id
我的意思是在被調用的命令中加入'$ myVariable'並檢查返回的值是否正確(即確認SetVariable正在工作)調試:當你的工具被限制*或者你正在假設什麼工作時當它不是*而後者是最有可能的。 – Richard