我在C#中有一堆powershell命令,但是其中一个返回0的结果,但我无法弄清楚,因此借助Internet的强大功能,我希望你们有一个答案。

我的C#代码运行的功率如下

internal static List<ExchangeMailboxes> ExchangeMailboxList(string snapIn)
        {
            List<ExchangeMailboxes> data = new List<ExchangeMailboxes>();
            StringBuilder stringBuild = new StringBuilder();
            stringBuild.AppendLine("$script:WarningPreference = 'SilentlyContinue'");
            stringBuild.AppendLine(
                "Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select DisplayName,@{name='TotalItemSize';expression={[math]::Round((($_.TotalItemSize.Value.ToString()).Split('(')[1].Split(' ')[0].Replace(',','')/1GB),2)}},@{name='TotalDeletedItemSize';expression={[math]::Round((($_.TotalDeletedItemSize.Value.ToString()).Split('(')[1].Split(' ')[0].Replace(',','')/1GB),2)}}");
            using (PowerShell inst = PowerShell.Create())
            {
                inst.AddScript("Add-PSSnapin " + snapIn)
                    .AddScript(stringBuild.ToString());
                Collection<PSObject> results = inst.Invoke();
                foreach (PSObject obj in results)
                {
                    data.Add(new ExchangeMailboxes()
                    {
                        Name = obj.Members["DisplayName"].Value.ToString(),
                        InboxSize = obj.Members["TotalItemSize"].Value.ToString(),
                        DeletedSize = obj.Members["TotalDeletedItemSize"].Value.ToString()
                    });
                }
            }
            return data;
        }

我可以确认该管理单元是否正确加载,并且如果我手动运行powershell命令,一切都很好,并且我确认没有任何权限问题

这是原始格式的powershell命令
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select DisplayName,@{name='TotalItemSize';expression={[math]::Round((($_.TotalItemSize.Value.ToString()).Split('(')[1].Split(' ')[0].Replace(',','')/1GB),2)}},@{name='TotalDeletedItemSize';expression={[math]::Round((($_.TotalDeletedItemSize.Value.ToString()).Split('(')[1].Split(' ')[0].Replace(',','')/1GB),2)}}

最佳答案

与Exchange 2010和更高版本进行交互的推荐方法是使用microsoft.exchange配置打开到http://servername/powershell的 session :

$ExSession = New-PSSession –ConfigurationName Microsoft.Exchange –ConnectionUri ‘http://ExServer1.contoso.com/PowerShell/?SerializationLevel=Full’ -Credential $Credentials –Authentication Kerberos

我从未尝试过从C#代码进行远程处理,但我想它与您现在所做的没有什么不同(当然,除了Powershell代码本身之外)。由于您正在与Exchange中的各种“大小”属性进行交互,因此仍然建议在本地安装管理工具,否则这些值将无法正确地序列化/反序列化(您可以在serverfault上找到关于该主题的其他文章)。

关于c# - 在C#中交换Powershell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31195976/

10-12 12:20
查看更多