【发布时间】:2011-07-11 19:49:19
【问题描述】:
您好,我正在开发一个 C# 程序,以在远程运行空间中调用 exchange 2010 powershell cmdlet。 ps 命令是:
"Get-MailboxDatabase -Server EX2010SVR1 -Status | Format-List Identity,Guid,mounted,CircularLoggingEnabled,Recovery |输出文件 'C:\db.txt' -Encoding UTF8 -Width 8192".
我的代码类似于:
static int Main(string[] args)
{
const string SHELL_URI = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";
const string COMMAND = "Get-MailboxDatabase -Server EX2010SVR1 -Status | Format-List Identity,Guid,mounted,CircularLoggingEnabled,Recovery | Out-File 'C:\db.txt' -Encoding UTF8 -Width 8192";
System.Uri serverUri = new Uri("http://EX2010SVR1/powershell?serializationLevel=Full");
PSCredential creds = (PSCredential)null; // Use Windows Authentication
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(serverUri, SHELL_URI, creds);
try
{
using (Runspace rs = RunspaceFactory.CreateRunspace(connectionInfo))
{
rs.Open();
PowerShell psh = PowerShell.Create();
psh.Runspace = rs;
psh.AddCommand(COMMAND);
Collection results = psh.Invoke();
rs.Close();
}
}
catch (Exception ex)
{
System.Console.WriteLine("exception: {0}", ex.ToString());
}
return 0;
}
当我在托管 Exchange 2010 服务器的 Win2008 R2 上运行 c# 程序时,我总是遇到异常:
System.Management.Automation.RemoteException: The term 'Format-List' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
at System.Management.Automation.PowerShell.CoreInvoke[TOutput](IEnumerable input, PSDataCollection`1 output, PSInvocationSettings settings)
at System.Management.Automation.PowerShell.Invoke(IEnumerable input, PSInvocationSettings settings)
at System.Management.Automation.PowerShell.Invoke()
at RemotePS.Program.Main(String[] args)
在没有“Format-List”和“Out-File”管道的情况下,程序运行良好。整个命令在 exchange 2010 管理 shell 中也可以正常工作。我还确认它是系统上的 powershell 2.0。
任何人都可以帮助弄清楚发生了什么吗?非常感谢任何帮助。
汤姆
【问题讨论】:
-
如果您在没有 Format-List cmdlet 的情况下执行命令会发生什么情况,最后这是“格式化”cmdlet,您可以出于测试原因尝试放弃它。 ?
-
另一件事:查看在线文档,您可以找到 Format-List 适用于:Windows PowerShell 2.0。可能在“服务器端”命令外壳不是 2.0
-
程序在没有“格式列表”和“输出文件”管道的情况下运行良好。整个命令在 exchange 2010 管理 shell 中也可以正常工作。
标签: c# powershell exchange-server-2010