使用C# PowerShell API调用Msol命令:链式调用无结果问题咨询
问题原因及解决方法
你的链式调用写法不正确,问题出在AddCommand的使用逻辑上:
- 连续调用
AddCommand时,PowerShell会将前一个命令的输出作为后一个命令的输入(管道传递),但Connect-MsolService是无输出的连接命令,没有任何对象能传递给Get-MsolCompanyInformation,且这两个命令本就不需要管道关联。 - 而
AddScript用分号分隔命令,是让PowerShell依次独立执行两条命令,这才是符合需求的执行逻辑。
修正后的链式调用代码
要实现和AddScript相同的效果,需用AddStatement()分隔两个独立命令,而非连续使用AddCommand:
using (PowerShell ps = PowerShell.Create()) { ps.AddCommand("connect-msolservice") .AddStatement() // 分隔独立执行的命令 .AddCommand("Get-MsolCompanyInformation"); Collection<PSObject> results = ps.Invoke(); foreach (PSObject result in results) { label.Content = "Last AD Sync: " + result.Properties["LastDirSyncTime"].Value; } }
关键区别说明
AddCommand:用于添加单条命令,连续调用会构建管道链,将前序命令输出传递给后续命令。AddStatement:用于添加新的独立执行语句,等价于PowerShell脚本中用分号分隔命令,让多个命令按顺序独立运行。
内容的提问来源于stack exchange,提问作者meeoun
相关产品推荐
相关产品推荐

