【问题标题】:Powershell Dynamic Menu Based on Mailbox Permission Entries基于邮箱权限条目的 Powershell 动态菜单
【发布时间】:2018-11-22 22:36:58
【问题描述】:

我在 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 行显示完整的用户名。但是,菜单只返回用户名的第一个字母。这是一个问题,因为此函数的输出用于删除邮箱的用户权限。我这辈子都想不通。

【问题讨论】:

  • 试试$menu.Add($i,$($rights[$i-1]))。我想你忘记了美元符号

标签: powershell


【解决方案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

【讨论】:

  • +1 用于解释和有效的解决方案,但 PowerShell 惯用的解决方案是使用 @(AuditSingleMailboxPermission -mbox $mbox).User,即使用数组子表达式运算符 @(...),这保证了命令的输出被视为一个数组,如果它还不是一个数组。
猜你喜欢
  • 1970-01-01
  • 2019-01-09
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2015-09-07
  • 2023-01-20
  • 2013-08-15
相关资源
最近更新 更多