我得到了以下PS脚本:
[other stuff]
try {
$Mailbox.user = $auser
$Mailbox.SetInfo()
$return = new-object psobject -property @{ReturnCode=0;ReturnString="Account " + $Alias + " Quota successfull modified"}
$return
}
catch {
$return = new-object psobject -property @{ReturnCode=1;ReturnString="Account " + $Alias + " ERROR while Quota modification"}
$return
}
当我在powershell中调用该脚本时,我收到一个结果“Quota success modified”
现在我在C#中调用相同的脚本(具有相同的参数):
var result = powerShellProcessor.ExcecutePowerShell(scriptPath, parameters);
现在结果不包含ONE PsObject,而是包含两个。结果中的第一个元素是NULL,第二个元素包含“Quota success modified”(就像直接从powershell调用时的唯一结果)
当然我可以抓住第二个结果,但我很好奇这是怎么发生的?
(ExecutePowerShell使用Powershell.Invoke作为返回值:)
public Collection<PSObject> ExcecutePowerShell(string scriptFile, IEnumerable<PSCommandParameter> parameters)
{
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddScript(GetScriptContent(scriptFile));
Collection<CommandParameter> commandParameters = new Collection<CommandParameter>();
foreach (PSCommandParameter scriptParameter in parameters)
{
ps.AddParameter(scriptParameter.ParameterName, scriptParameter.ParameterValue);
}
Collection<PSObject> ret = ps.Invoke();
return ret
}
答案 0 :(得分:2)
根据您描述的症状,看来SetInfo()
方法正在返回空对象。您可以扔掉空对象。例如:
[Void] Mailbox.SetInfo()
我也建议采用这种模式
$return = some_expression
$return
可以简称为
some_expression
如果此时需要终止功能,可以编写
return some_expression