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