control-flow - 我对 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 参数工作。
解决方案
推荐阅读
- c# - 创建流利的api问题
- spring - @Transactional 方法中的@Transactional 方法调用(都具有默认传播)
- bash - 为什么 echo -n 在 Mac 上的 shell 中不起作用?
- javascript - 通过javascript从表单中读取格式化文本
- java - 二叉搜索树不会添加新节点?
- html - 更改 HTML 或 CSS 时,它们在页面上不可见
- sql - SQL select 语句正在查找视图中不应存在的内容
- python - python将字典复制到excel中
- python - Python程序中加密的识别
- string - 如何从字符串中删除标记并将其变成列表