2012-05-12 11 views
1

我有下面的代码执行交换cmdlet的但是当我得到的结果回到它给了我这样一个值:交换PowerShell中不显示结果正确

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(); 

回答

1

你想要字符串表示是什么? ToString给你的类名称(这是对象的默认行为)

你可以看看the class definition找出你想要显示的内容。

如果你想像Exchange shell那样显示它,你可以看看它的视图是如何在exchange.format.ps1xml中定义的 - 这里有一个来自该文件的片段,它似乎表明它显示了属性Identity,User ,AccessRights,IsInherited和Deny。

或者,您可以更改管道以执行out-string(或format-table或其他),以便它在离开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> 
+0

非常感谢。另外我有一个名为initconnection的方法,它设置我的连接来交换。从另一种方法发送另一个powershell commnad的正确方法是什么?目前我有一个模式弹出窗口,它创建了我的连接。然后我有另一个按钮,例如称为get邮箱,当我点击时执行一个名为getboxes的方法。但是我不确定如何在没有再次创建连接的情况下执行此操作。 – user541597

+0

我不知道那个 - 可能值得张贴为一个新的问题 –