Powershell邮箱权限配置脚本条件语句分支执行异常咨询
问题描述
我在调试用于邮箱权限配置的PowerShell脚本时,对其条件语句的运行逻辑存在疑问,测试控制流过程中出现了异常结果:脚本首次运行时所有分支均可正常执行,其中第一个条件分支使用嵌套IF语句,第二个分支无嵌套结构;但我先测试完其中一个IF分支后,再次运行脚本走另一个IF分支时就无法正常执行,全程未修改脚本代码,暂未定位到具体是哪条语句存在问题。
初始版本脚本
$Optcmd = Read-Host -Prompt "Does the User/s require permissions set to the whole [M]ailbox or to a specific [F]older within the mailbox?[M/F]" if ($Optcmd -like "m"){ $confmailbox = Read-Host -Prompt "The permission you set here will give the User/s the same level of access to the other folders and calendar within the mailbox. Continue?[Y/N]" } else { $confmfoldper = Read-Host -Prompt "You have selected to apply permissions to a specific folder continue? [Y/N]?" } if ($confmailbox -like "y"){ Write-Host -ForegroundColor Yellow "What access rights does the user/s require? " Write-Host -ForegroundColor Green "[1] ChangeOwner - "-NoNewline Write-Host -ForegroundColor Yellow " The user who can change the mailbox owner permission" Write-Host -ForegroundColor Green "[2] DeleteItem - " -NoNewline Write-Host -ForegroundColor Yellow " The user who can only delete items in the mailbox" Write-Host -ForegroundColor Green "[3] ExternalAccount - " -NoNewline Write-Host -ForegroundColor Yellow " The user is not in the same organization" Write-Host -ForegroundColor Green "[4] FullAccess - " -NoNewline Write-Host -ForegroundColor Yellow " The user who can do everything in this mailbox" Write-Host -ForegroundColor Green "[5] ReadPermission - " -NoNewline Write-Host -ForegroundColor Yellow " The user who can only read everything in the mailbox" $Boxperm = Read-Host -prompt "Enter corresponding number" if ($Boxperm -eq 1){$Boxperm = 'ChangeOwner'} if ($Boxperm -eq 2){$Boxperm = 'DeleteItem'} if ($Boxperm -eq 3){$Boxperm = 'ExternalAccount'} if ($Boxperm -eq 4){$Boxperm = 'FullAccess'} if ($Boxperm -eq 5){$Boxperm = 'ReadPermission' } $Boxperm } Elseif ($confmfoldper -like 'y') { Write-Host -ForegroundColor Yellow "Select a role to assign to the User/s " Write-Host -ForegroundColor Green "[1] Author - "-NoNewline Write-Host -ForegroundColor Yellow "CreateItems, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[2] Contributor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, FolderVisible" Write-Host -ForegroundColor Green "[3] Editor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[4] NonEditingAuthor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, DeleteOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[5] Owner - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderContact, FolderOwner, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[6] PublishingAuthor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, CreateSubfolders, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[7] PublishingEditor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[8] Reviewer - " -NoNewline Write-Host -ForegroundColor Yellow "FolderVisible, ReadItems" $Folderperm = Read-Host -prompt "Enter corresponding number" $Folderperm }
更新后版本脚本
param( [String]$Useremail, [String]$ImportPath ) $confmailbox = $null $Folderperm = $null $confmfoldper = $null $Folder = $null $Mailbox = Read-Host "Enter Mailbox ID " $Displayname = Get-Mailbox -Identity $Mailbox $Optcmd = Read-Host -Prompt "Does the User/s require permissions set to the whole [M]ailbox or to a specific [F]older within the mailbox?[M/F]" if ($ImportPath -ne "") { $ImportCSV = Import-Csv $ImportPath } if ($Optcmd -like "m"){ $confmailbox = Read-Host -Prompt "The permission you set here will give the User/s the same level of access to the other folders and calendar within the mailbox. Continue?[Y/N]" } elseif ($Optcmd -like "f") { $confmfoldper = Read-Host -Prompt "You have selected to apply permissions to a specific folder continue? [Y/N]?" } if ($confmailbox -like "y"){ Write-Host -ForegroundColor Yellow "What access rights does the user/s require? " Write-Host -ForegroundColor Green "[1] ChangeOwner - "-NoNewline Write-Host -ForegroundColor Yellow " The user who can change the mailbox owner permission" Write-Host -ForegroundColor Green "[2] DeleteItem - " -NoNewline Write-Host -ForegroundColor Yellow " The user who can only delete items in the mailbox" Write-Host -ForegroundColor Green "[3] ExternalAccount - " -NoNewline Write-Host -ForegroundColor Yellow " The user is not in the same organization" Write-Host -ForegroundColor Green "[4] FullAccess - " -NoNewline Write-Host -ForegroundColor Yellow " The user who can do everything in this mailbox" Write-Host -ForegroundColor Green "[5] ReadPermission - " -NoNewline Write-Host -ForegroundColor Yellow " The user who can only read everything in the mailbox" $Boxperm = Read-Host -prompt "Enter corresponding number" } switch($Boxperm) { {$_ -eq 1} {$Boxperm = 'ChangeOwner' ; break;} {$_ -eq 2} {$Boxperm = 'DeleteItem' ; break;} {$_ -eq 3} {$Boxperm = 'ExternalAccount' ; break;} {$_ -eq 4} {$Boxperm = 'FullAccess' ; break;} {$_ -eq 5} {$Boxperm = 'ReadPermission' ; break;} } if ($confmfoldper -like 'y') { Write-Host -ForegroundColor Yellow "Select a role to assign to the User/s " Write-Host -ForegroundColor Green "[1] Author - "-NoNewline Write-Host -ForegroundColor Yellow "CreateItems, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[2] Contributor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, FolderVisible" Write-Host -ForegroundColor Green "[3] Editor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[4] NonEditingAuthor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, DeleteOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[5] Owner - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderContact, FolderOwner, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[6] PublishingAuthor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, CreateSubfolders, DeleteOwnedItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[7] PublishingEditor - " -NoNewline Write-Host -ForegroundColor Yellow "CreateItems, CreateSubfolders, DeleteAllItems, DeleteOwnedItems, EditAllItems, EditOwnedItems, FolderVisible, ReadItems" Write-Host -ForegroundColor Green "[8] Reviewer - " -NoNewline Write-Host -ForegroundColor Yellow "FolderVisible, ReadItems" $Folderperm = Read-Host -prompt "Enter corresponding number" $Folder = Read-Host "Enter the FOLDER NAME ( Examplles : Inbox,calendar…)" $foldername = $Displayname.WindowsEmailAddress + ":\" + $Folder } switch($Folderperm) { {$Folderperm -eq 1} {$Folderperm = 'Author' ; break; } {$Folderperm -eq 2} {$Folderperm = 'Contributor' ; break;} {$Folderperm -eq 3} {$Folderperm = 'Editor' ; break;} {$Folderperm -eq 4} {$Folderperm = 'NonEditingAuthor' ; break;} {$Folderperm -eq 5} {$Folderperm = 'Owner' ; break;} {$Folderperm -eq 6} {$Folderperm = 'PublishingAuthor' ; break;} {$Folderperm -eq 7} {$Folderperm = 'PublishingEditor' ; break;} {$Folderperm -eq 8} {$Folderperm = 'Reviewer' ; break;} } if ($confmailbox -like 'y' -and $ImportPath -eq "") { Add-MailboxPermission -identity $Displayname.Name -user $Useremail -AccessRights $Boxperm -InheritanceType All -Automapping $false } If ($Folder -ne "" -and $ImportPath -ne "") { Add-MailboxFolderPermission $foldername -User $Useremail -AccessRights $Foldperm -confirm:$true } if ($confmailbox -like 'y' -and $ImportPath -ne "") { foreach ($User in $ImportCSV){ Add-MailboxPermission -identity $Displayname.Name -user $User.Email -AccessRights $Boxperm -InheritanceType All -Automapping $false } } If ($Folder -ne "" -and $ImportPath -ne "") { foreach ($User in $ImportCSV) { Add-MailboxFolderPermission $foldername -User $User -AccessRights $Foldperm -confirm:$true } }
当前测试进度
- 暂未对嵌套ForEach语句关联的ImportCSV参数进行测试
- 仅确认传入
-Useremail参数时脚本可正常运行
内容的提问来源于stack exchange,提问作者Get-Drink_-Energy_Redbull
相关产品推荐
相关产品推荐

