基于邮箱权限条目的Powershell动态菜单

时间:2018-11-22 13:59:34

标签: powershell

我无法从PowerShell中的邮箱权限条目创建动态菜单。以下功能获取所选邮箱的权限条目列表,并输出一个表。

Function AuditSingleMailboxPermission($mbox) {
If ($mbox -like $null){
    Write-Host "Please select the mailbox from the list below"
    $mbox = SelectMailbox
  }

  $mboxPermissions = Get-MailboxPermission $mbox | where {$_.User -like "*@*"}
  Return $mboxPermissions
}

下一个功能使用上一个功能的输出来构建菜单。

Function SelectMailboxPermission($mbox) {
$rights = (AuditSingleMailboxPermission -mbox $mbox).User
Write-Host $rights
$menu = @{}
  for ($i=1;$i -le $rights.count; $i++) {
    Write-Host "$i. $($rights[$i-1])"
    $menu.Add($i,($rights[$i-1]))
  }
  [int]$ans = Read-Host "Enter selection"
  $selection = $menu.Item($ans)
  Return $selection
}

Write-Host $ rights行显示完整的用户名。但是,菜单仅返回用户名的首字母。这是一个问题,因为此函数的输出用于删除邮箱上的用户权限。我一辈子都想不通。

1 个答案:

答案 0 :(得分:1)

如果(AuditSingleMailboxPermission -mbox $mbox).User仅返回一项,它将返回一个对象,而不是长度为1的数组。然后,当您引用$rights[0]时,它不会返回数组的第一个对象,而是对象的String表示形式的第一个字符。

投射到Array应该可以解决此问题:

$rights = [Array](AuditSingleMailboxPermission -mbox $mbox).User

通用示例:

PS C:\> ("FOO", "BAR", "BAZ" | Select-Object -First 1)[0]
F

PS C:\> ("FOO", "BAR", "BAZ" | Select-Object -First 2)[0]
FOO