【问题标题】:How to get values from enumeration created from PowerShell如何从 PowerShell 创建的枚举中获取值
【发布时间】:2011-11-07 22:55:19
【问题描述】:

我正在开发一个 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# 访问它们。

【问题讨论】:

  • 请不要在标题中添加“C#/PowerShell:”之类的内容。在Stack Overflow 上,我们为此目的使用标签。
  • 不能只使用Value 属性访问值吗?

标签: c# powershell exchange-server


【解决方案1】:

你需要转换值。

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

【讨论】:

  • 这样做实际上是导致上面的错误 do to no public GetEnumerator existing.
  • 哦,呃,我们需要转换值。我太习惯 PowerShell 为我做这件事了。 :)
  • 我认为这个演员表不会起作用,除非您直接引用包含 Microsoft.Exchange.Management.RecipientTasks.MailboxRights 的程序集。
  • 他已经在使用 Exchange 库来运行这些命令。
  • 从哪里获得 Microsoft.Exchange.Management.RecipientTasks?它似乎是 Exchange 的一部分,我们有一个独立的外部应用程序,用于添加、删除并希望获得邮箱权限。
【解决方案2】:

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

EG 返回所有邮箱权限:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2021-04-29
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多