如何从PowerShell创建的枚举中获取值

时间:2011-08-31 20:43:15

标签: c# powershell exchange-server

我正在开发一个asp.net网站,我们的安全区域将用它来管理Exchange环境中的邮箱等。在网站中,我调用各种PowerShell命令,然后通过C#处理这些结果。在一个特定实例中,我想显示所有未继承的邮箱权限。

以下是我执行此操作的代码部分:

Collection<PSObject> results;
results = thisPipeline.Invoke();
myRunSpace.Close();

foreach (PSObject obj in results)
{
    //Don't include inherited rights
    if (obj.Properties["IsInherited"].Value.ToString().ToLower() != "true")
    {
        //Don't include permissions that are explicitly denied
        if (obj.Properties["Deny"].Value.ToString().ToLower() != "true")
        {
            if (obj.Properties["User"].Value.ToString().ToLower() != "nt authority\\self")
            {
                TableRow permissionRow = new TableRow();
                TableCell permissionUserCell = new TableCell();
                TableCell permissionRightsCell = new TableCell();
                Label permissionUserLabel = new Label();
                Label permissionRightsLabel = new Label();

                permissionUserLabel.Text = obj.Properties["User"].Value.ToString();
                                //This is my problem
                permissionRightsLabel.Text = obj.Properties["AccessRights"].Value.ToString();

                permissionUserCell.Controls.Add(permissionUserLabel);
                permissionRightsCell.Controls.Add(permissionRightsLabel);

                permissionRow.Controls.Add(permissionUserCell);
                permissionRow.Controls.Add(permissionRightsCell);

                table.Controls.Add(permissionRow);
            }
        }
    }
}

这会导致显示Microsoft.Exchange.Management.RecipientTasks.MailboxRights []的表的“访问权限”列。

如果我尝试做foreach,我会收到编译错误。

  

CS1579:foreach语句不能对'System.Management.Automation.PSPropertyInfo'类型的变量进行操作,因为   'System.Management.Automation.PSPropertyInfo'不包含   'GetEnumerator'的公共定义

我找到了很多关于如何通过直接PowerShell访问这些值的示例,但我无法弄清楚如何通过C#访问它们。

2 个答案:

答案 0 :(得分:2)

你需要施放价值。

foreach (Object foo in (Microsoft.Exchange.Management.RecipientTasks.MailboxRights[])obj.Properties["AccessRights"].Value)

答案 1 :(得分:0)

您尚未粘贴最初用于从Get-MailboxPermission cmdlet获取属性的powershell,因此我无法肯定地说,但我认为这是最容易编辑以解决此问题的地方。 尝试选择AccessRights属性作为表达式,我认为它应该可以解决您的问题。

EG要返回所有邮箱权限:

Get-Mailbox `
| Get-MailboxPermission `
| Select @{l="AccessRights";e={$_.AccessRights}}, `
          Deny, InheritanceType, User, Identity, IsInherited, IsValid