Как получить значения из перечисления, созданного из PowerShell - PullRequest
3 голосов
/ 01 сентября 2011

Я работаю на сайте 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 ]

2 голосов
/ 01 сентября 2011

Вам нужно привести значение.

foreach (Object foo in (Microsoft.Exchange.Management.RecipientTasks.MailboxRights[])obj.Properties["AccessRights"].Value)
0 голосов
/ 14 января 2013

Вы не вставили ранее используемый PowerShell, чтобы получить свойства из командлета Get-MailboxPermission, поэтому я не могу сказать наверняка, но я думаю, что это самое простое место для редактирования, чтобы это исправить. Попробуйте выбрать свойство AccessRights в качестве выражения, я думаю, оно должно решить вашу проблему.

EG Для возврата всех разрешений почтового ящика:

Get-Mailbox `
| Get-MailboxPermission `
| Select @{l="AccessRights";e={$_.AccessRights}}, `
          Deny, InheritanceType, User, Identity, IsInherited, IsValid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...