未执行Powershell开关断开标签
作为更大脚本的一部分,我实现了下面详述的未执行Powershell开关断开标签,powershell,break,Powershell,Break,作为更大脚本的一部分,我实现了下面详述的开关。其目的是,当执行脚本时,用户可以选择 在屏幕上输入要迁移的用户,或 从文件导入 如果选择了“从文件导入”选项-我想测试文件是否存在-如果不存在,我想中断并返回开关标签:选择。但是,当我选择“从文件导入”选项并提供不存在的路径时,脚本将继续,并且不会中断或返回到标签。我哪里做错了 $chooseInputMethod = @" This script migrates one or more user accounts between two trus
开关。其目的是,当执行脚本时,用户可以选择
在屏幕上输入要迁移的用户,或
从文件导入
如果选择了“从文件导入”选项-我想测试文件是否存在-如果不存在,我想中断并返回开关标签:选择。但是,当我选择“从文件导入”选项并提供不存在的路径时,脚本将继续,并且不会中断或返回到标签。我哪里做错了
$chooseInputMethod = @"
This script migrates one or more user accounts between two trusted domains in a forest e.g. from domain1 to domain2 (or vice versa)
Select method to specify user(s) to migrate:
1. Enter name(s) on-screen (default)
2. Import name(s) from file
Enter selection number
"@
$choosePath = @"
Enter path to file..
Notes
- Filename:
If file is located in script directory ($pwd) you can enter the filename without a path e.g. users.txt
- No quotation marks:
DO NOT put any quotes around the path even if it contains spaces e.g. e:\temp\new folder\users.txt
Enter path or filename
"@
$enterUsernames = @"
Enter username(s) seperate each with a comma e.g. test1 or test1,test2,test3`n`nEnter name(s)
"@
cls
:choose switch (Read-Host $chooseInputMethod) {
1 { cls; $usersFromScreen = Read-Host $enterUsernames }
2 {
cls;
$usersFromFile = Read-Host $choosePath;
if (-not (Test-Path $usersFromFile -PathType Leaf)) {
break choose
}
}
default { cls; $usersFromScreen = Read-Host $enterUsernames }
}
Write-Host "hello"
从:
在PowerShell中,只有循环关键字(如Foreach、For和While)可以有标签
因此,开关
,即使它具有循环功能,在这种情况下也不被视为循环
但是,在这种情况下,我不明白为什么没有标签的中断是不够的。开关中断将退出它。只有一个循环(开关,在阵列上工作),所以普通中断和中断到开关之间没有区别。您似乎希望另一个循环中的开关重复此操作
# only runs once
:outer while (1) {
'outer'
while (1) {
'inner'
break outer
}
}
outer
inner
带标签和循环的交换机演示。文档并不完美
# only runs once
:outer switch (1..10) {
default {
'outer'
foreach ($i in 1..10) {
'inner'
break outer
}
}
}
outer
inner
另一个交换机演示
switch (1..4) {
{ $_ % 2 } { "$_ is odd" }
default { "$_ is even" }
}
1 is odd
2 is even
3 is odd
4 is even
您需要的是while
循环,而不是开关
。开关可以有标签,也可以循环。谢谢您的帮助。我认为乔伊的答案是正确的——即使在你所展示的例子中,对于一个带有标签的开关,你正在打破一段时间或一个foreach循环