c# - 通过 c# 交换 powershell 无法正确显示结果

标签 c# powershell exchange-server

我有以下执行交换 cmdlet 的代码,但是当我返回结果时,它会给我这样的值:

Microsoft.Exchange.Management.RecipientTasks.MailboxAcePresentationObject

如何获取此对象的文本值而不是对象本身?

这是我用来获取值的代码。

 powershell.Runspace = runspace;

    powershell = PowerShell.Create();
    PSCommand command = new PSCommand();
    command.AddCommand("Get-MailboxPermission");
    command.AddParameter("Identity", "myname");
    powershell.Commands = command;
    powershell.Runspace = runspace;
      Collection<PSObject> result = powershell.Invoke();


    StringBuilder sb = new StringBuilder();

    foreach (PSObject ps in result)
    {

        sb.AppendLine(ps.ToString());

    }

    sb.AppendLine();

    lbl.Text += sb.ToString();

最佳答案

您希望字符串表示形式是什么? ToString 为您提供类名(这是对象的默认行为)

可以看看the class definition弄清楚你想显示什么。

如果你想像 Exchange shell 那样显示它,你可以看看它的 View 是如何在 exchange.format.ps1xml 中定义的——这是该文件的一个片段,它似乎表明它显示了属性身份、用户、 AccessRights、IsInherited 和 Deny。

或者,您可以更改您的管道以执行输出字符串(或格式表或其他),以便它在离开 PowerShell 之前已经被格式化为所需的字符串。

    <View>
        <Name>Microsoft.Exchange.Management.RecipientTasks.MailboxAcePresentationObject</Name>
        <ViewSelectedBy>
            <TypeName>Microsoft.Exchange.Management.RecipientTasks.MailboxAcePresentationObject</TypeName>
        </ViewSelectedBy>
        <TableControl>
            <TableHeaders>
                <TableColumnHeader>
                    <Label>Identity</Label>
                    <Width>20</Width>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>User</Label>
                    <Width>20</Width>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>AccessRights</Label>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>IsInherited</Label>
        <Width>11</Width>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>Deny</Label>
                    <Width>5</Width>
                </TableColumnHeader>
            </TableHeaders>
            <TableRowEntries>
                <TableRowEntry>
                    <TableColumnItems>
                        <TableColumnItem>
                            <PropertyName>Identity</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <PropertyName>User</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <PropertyName>AccessRights</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <PropertyName>IsInherited</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <PropertyName>Deny</PropertyName>
                        </TableColumnItem>
                    </TableColumnItems>
                </TableRowEntry>
            </TableRowEntries>
        </TableControl>
    </View>

关于c# - 通过 c# 交换 powershell 无法正确显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567503/

相关文章:

powershell - powershell 2.0 报错,但不知道为什么

Powershell 访问上一个管道中的变量

xml - 交换 : Find items in EWS conversation using XML request?

c# - 当 SMTP 服务器具有有效证书时获取 "The remote certificate is invalid according to the validation procedure"

c# - 默认字符串初始化 : NULL or Empty?

windows - 净用户 $userName/domain

iis - 我应该如何将排队的邮件从 IIS 移动到不同服务器上的 Exchange?

html - HTTPS 图像未在 HTML 电子邮件中为某些用户显示

c# - 按位运算符让我见鬼去吧

c# - 使用 HttpClient.GetAsync() 使用具有基本身份验证的 WCF REST 服务会导致 (401) 未经授权