[玩转系统] PowerShell 中的 Switch Case | PowerShell 中 Switch Case 的完整指南
作者:精品下载站 日期:2024-12-14 04:52:33 浏览:14 分类:玩电脑
PowerShell 中的 Switch Case | PowerShell 中 Switch Case 的完整指南
PowerShell 中的巫术案例简介
PowerShell中的Switch函数用于处理多个If语句,或者换句话说,它是多个条件If/Else If/Else的替换。要检查脚本或函数中的单个条件,您可以使用 If/else 语句,但如果您想评估更多 IF 语句,请使用 Switch。
Switch 比多个 If 语句更好,并且易于实现且易于编码。每个语句下都有多个条件,当满足其中一个条件时,就会执行操作。
语法:
Switch (<Value>)
{
<Condition1> {Action1}
<Condition2> {Action2}
}
完整语法:
Switch [-regex | -wildcard | -exact ] [ -casesensitive ] ( <value> ) {
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}
或者
Switch [-regex | -wildcard | -exact ] [ -casesensitive ] -file [filename]{
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}
PowerShell 中 Switch Case 的参数
- 正则表达式:也称为正则表达式。针对条件值执行正则表达式检查。如果您使用正则表达式,则通配符和精确值将被忽略。另外,如果匹配子句不是字符串,则忽略此参数。
- 通配符:表示条件是通配符字符串。如果您使用通配符,则正则表达式和精确表达式将被忽略。另外,如果匹配子句不是字符串,则忽略此参数。
- 精确:对精确字符串进行匹配。如果使用 Exact,则忽略通配符和正则表达式,并且如果匹配子句不是字符串,则忽略此参数。
- 区分大小写:此参数将检查与传递的值完全匹配的条件(区分大小写),如果不匹配,则忽略此参数。它还需要一个字符串值。
- 文件:将文件路径作为输入值而不是字符串值。如果传递多个文件参数,则只取最后一个。读取文件的每一行并根据条件进行评估,如果条件匹配,则执行该值或显示写入的消息。
流程图
Switch 在 PowerShell 中如何工作?
如上图所示,每当传递任何值(字符串、整数、浮点或其他数据类型)、数组、通配符、文件等时,它就会开始一一匹配条件,当条件匹配时,脚本执行该块。对于多个匹配值,将执行多个 scrips 块,如果没有找到匹配值并且指定了默认条件,则执行该块,否则有空输出。
PowerShell 中的 Switch Case 示例
让我们看看给出的例子:
示例#1
1. 简单的 switch 函数,传递字符串、整数值。
代码:
switch (3) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}
输出:
代码:
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
输出:
现在,如果参数与表达式不匹配怎么办?如下所示,5 与任何 Switch 案例均不匹配。在这种情况下,输出将为空。
代码:
switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}
为了克服上述问题,需要指定default,并且当没有参数匹配时执行default块。
代码:
switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
default{"No Match Found"}
}
输出:
示例#2
让我们看看给出的例子:
if/else if /else 和 Switch 之间的区别。从下面的例子中,您可以了解到使用 Switch 函数编写脚本是多么容易。
代码:
$time = 3
if($time -eq 1){"It's 1 O'Clock"}
elseif ($time -eq 2) {"It's 2 O'Clock"}
elseif ($time -eq 3) {"It's 3 O'Clock"}
else {"No Match Found"}
$time = 3
switch ($time) {
1 {"It's 1 O'Clock"}
2 {"It's 2 O'Clock"}
3 {"It's 3 O'Clock"}
default{"No Match found"}
}
输出:
两种方法的执行时间。
代码:
$time = 3
Measure-Command {
if($time -eq 1){"It's 1 O'Clock"}
elseif ($time -eq 2) {"It's 2 O'Clock"}
elseif ($time -eq 3) {"It's 3 O'Clock"}
else {"No Match Found"}
}
总毫秒数:
代码:
$time = 3
Measure-Command {
switch ($time) {
1 {"It's 1 O'Clock"}
2 {"It's 2 O'Clock"}
3 {"It's 3 O'Clock"}
default{"No Match found"}
}
}
总毫秒数:
差异:31.3154 毫秒
当您在交换机内编写大量脚本或函数时,这种差异会变得巨大。
1.使用正则表达式参数进行切换
如果 switch 中提到正则表达式,它会使用传递的值计算表达式,如果部分条件匹配,则执行该操作。
考虑下面的例子。
代码:
Switch ("Donkey"){
"Dog" {"Dog is Mentioned"}
"Cat" {"Cat is Mentioned"}
"Don" {"Donkey is Mentioned"}
"key" {"Donkey is mentioned again"}
default {"Nothing is mentioned"}
}
输出:
添加正则表达式后。
代码:
Switch -Regex ("Donkey"){
"Dog" {"Dog is Mentioned"}
"Cat" {"Cat is Mentioned"}
"Don" {"Donkey is Mentioned"}
"key" {"Donkey is mentioned again"}
default {"Nothing is mentioned"}
}
输出:
2.使用通配符参数进行切换
通配符的工作方式与 Like 参数类似。
代码:
$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) {
"Error*" {"WMI Error"}
"Warning*" {"WMI Warning"}
"Successful*" {"WMI Connection Successful"}
}
输出:
3.精确参数切换
Switch 中默认具有精确功能。你用不用它并不重要。但是,当您同时使用两个参数时,最后一个参数优先。
代码:
Switch -Regex -Exact ("Hello"){
"He" {"Hello World"}
"Hi" {"Hi World"}
Default {"No World"}
}
输出:
代码:
Switch -Exact -Regex ("Hello"){
"He" {"Hello World"}
"Hi" {"Hi World"}
Default {"No World"}
}
输出:
4.使用文件参数进行切换
您可以直接向 Switch 提供文件路径作为参数。您可以将 File 与文件路径一起使用,而不是为其提供变量表达式。
代码:
Switch -Wildcard -File C:\temp\switchtest.txt {
"*Warning*"{Write-Warning $PSItem}
"*Error*"{Write-Error $PSItem}
}
输出:
您可以使用 $PSItem 或 $_ 来处理当前项目。
5.使用 CaseSensitive 参数进行切换
当您在开关中使用区分大小写的参数时,条件必须与每个字符完全匹配。
代码:
switch -CaseSensitive ("Hello") {
"HeLlo" {"This is different HeLlo"}
Default {"This is not Matching"}
}
输出:
6.将数组值传递给 switch 函数
简单数组:
switch (10,12) {
9 { "Nine" }
10 { "Ten" }
11 {"Eleven"}
12 {"Twelve"}
Default {"None"}
}
输出:
传递数组对象
代码:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) {
"VM_Delete" {"VM Delete Operation"}
"VM_Create" {"VM Create Operation"}
"VM_Shutdown" {"VM Shutdown Operation"}
}
输出:
7.中断条件
当您指定中断条件时,操作将在该循环中中断,并且无法继续进一步执行。当您不想在条件满足并且执行时间变得更快时检查进一步的步骤时,这非常有用。
代码:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) {
"VM_Delete" {
"VM Delete Operation"
break }
"VM_Create" {
"VM Create Operation"
break}
"VM_Shutdown" {
"VM Shutdown Operation"
break
}
}
输出:
如果您注意到,只执行了一个块,然后它就从 switch 函数中退出。
8.继续条件
continue 参数用于跳过特定迭代。例如,如果有 3 个项目需要匹配,那么它将首先执行,当条件匹配时,它将跳过其他步骤并进入下一步。
代码:
switch ('Hello') {
"hello" {'First Block Executes'
continue}
'HELLO' {'Second Block Executes'
continue }
'HeLLo' {'Third Block Exectues'
continue }
Default {'Nothing executed'}
}
输出:
正如你所看到的,只传递了一个参数(‘Hello’),它只执行第一个块,因为表达式匹配并且没有其他参数要执行,脚本将结束。
- 另一种使用 Switch 进行中断和继续的混合示例。
代码:
switch ('Alpha','Beta','Delta') {
"Alpha" {'First Block Executes'
continue}
'Beta' {'Second Block Executes'
break }
'Delta' {'This will not Execute'}
}
输出:
结论
总而言之,Switch 比实现多个 If 条件要好得多,并且提供了更多功能并减少了执行时间。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag