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