首页 > 解决方案 > 我对 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 参数工作。

标签: control-flowpowershell-5.1

解决方案


推荐阅读