You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:24:03