使用C#执行exchange管理shell cmdlet



我正在尝试使用C#执行以下exchange管理shell cmdlet,以获取服务器上的邮箱总数。

cmdlet:-

Get-mailbox -resultsize unlimited 

我的代码片段如下

        PSCredential credential = new PSCredential("Administrator", securePassword); // the password must be of type SecureString
        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(connectTo,schemaURI, credential);
        connectionInfo.MaximumConnectionRedirectionCount = 5;
        connectionInfo.SkipCACheck = true;
        connectionInfo.SkipCNCheck = true;
        try
        {
            Runspace remoteRunspace = RunspaceFactory.CreateRunspace(connectionInfo);
            remoteRunspace.Open();
            var command = new Command("Get-mailbox");
            command.Parameters.Add("resultsize", "unlimited");
            var pipeline = remoteRunspace.CreatePipeline();
            pipeline.Commands.Add(command);
            // Execute the command
            var results = pipeline.Invoke();
            MessageBox.Show(results.Count.ToString());
            remoteRunspace.Dispose();
        }
        catch (Exception ex)
        {
            //Handle error 
        }    

上面的代码给出了所需的结果,即邮箱总数。但是我如何选择所有邮箱的一些属性,即我如何执行以下cmdlet

cmdlets:

Get-mailbox | select-object DisplayName, PrimarySmtpAddress, ForwardingAddress, alias, identity, legacyexchangeDN | where-object {$_.ForwardingAddress -ne $Null}

请指导,我如何执行上面给定的cmdlet。。。感谢

您需要列出您在选择对象中指定的一些属性,您可以在下面的中这样做

var results = pipeline.Invoke();
foreach (PSObject result in results) {
Console.WriteLine(result.Properties["DisplayName"].Value);
Console.WriteLine(result.Properties["PrimarySmtpAddress"].Value);
Console.WriteLine(result.Properties["ForwardingAddress"].Value);
Console.WriteLine(result.Properties["alias"].Value);
Console.WriteLine(result.Properties["identity"].Value);
Console.WriteLine(result.Properties["legacyexchangeDN "].Value);
}

使用Filter而不是where对象是很好的,这可以在下面运行

command.Parameters.Add("Filter", "{forwardingaddress -ne $null}");

最新更新