PowerShell 从基础到实战 3(控制结构与脚本交互)
一、与其他脚本程序的相互调用
PowerShell 可以直接调用外部脚本(如 Python、批处理文件)或执行命令行工具,实现跨语言协作。
1.1 调用外部命令
bash
# 直接调用 Windows 命令(如 ping)
ping google.com
# 调用外部可执行文件(如 Notepad)
notepad
# 调用批处理文件
.\example.bat
1.2 使用 Start-Process
调用脚本
arduino
# 调用 Python 脚本(需安装 Python)
Start-Process -FilePath "python.exe" -ArgumentList ".\script.py"
# 调用批处理文件并传参
Start-Process -FilePath ".\example.bat" -ArgumentList "arg1", "arg2"
1.3 从 PowerShell 调用 Python 脚本
bash
# 示例:调用 Python 脚本并捕获输出
$output = python .\add.py 5 3
Write-Host "Python 返回结果: $output"
Python 脚本 add.py
示例:
css
import sys
a, b = int(sys.argv[1]), int(sys.argv[2])
print(a + b)
二、条件操作符
PowerShell 支持丰富的比较和逻辑操作符,用于构建条件判断。
2.1 数值比较操作符
操作符 | 含义 |
---|---|
-eq |
等于 |
-ne |
不等于 |
-gt |
大于 |
-lt |
小于 |
-ge |
大于等于 |
-le |
小于等于 |
示例:
perl
$a = 10
$b = 5
if ($a -gt $b) {
Write-Host "$a 大于 $b"
}
2.2 字符串比较操作符
操作符 | 含义 |
---|---|
-like |
通配符匹配 |
-match |
正则匹配 |
-eq |
精确匹配 |
-notlike |
通配符不匹配 |
示例:
bash
$name = "Alice"
if ($name -like "A*") {
Write-Host "名称以 A 开头"
}
2.3 逻辑操作符
操作符 | 含义 |
---|---|
-and |
与 |
-or |
或 |
-not |
非 |
示例:
perl
if ($a -gt 0 -and $b -lt 10) {
Write-Host "条件成立"
}
三、条件判断 if
语句
if
语句用于基于条件执行代码块。
3.1 基本语法
php
if (条件) {
# 条件为真时执行
} elseif (条件) {
# 其他条件为真时执行
} else {
# 所有条件为假时执行
}
3.2 示例:判断磁盘空间
perl
$disk = Get-PSDrive C
if ($disk.Free -lt 5GB) {
Write-Host "磁盘空间不足!"
} elseif ($disk.Free -lt 10GB) {
Write-Host "磁盘空间偏低。"
} else {
Write-Host "磁盘空间充足。"
}
3.3 嵌套 if
语句
bash
$user = "admin"
$password = "123456"
if ($user -eq "admin") {
if ($password -eq "123456") {
Write-Host "登录成功"
} else {
Write-Host "密码错误"
}
} else {
Write-Host "用户不存在"
}
四、条件判断 switch
语句
switch
用于多条件分支判断,比 if-elseif
更简洁。
4.1 基本语法
arduino
switch (表达式) {
值1 { 代码块1 }
值2 { 代码块2 }
default { 默认代码块 }
}
4.2 示例:匹配用户输入
php
$action = "start"
switch ($action) {
"start" { Write-Host "开始任务" }
"stop" { Write-Host "停止任务" }
"exit" { Write-Host "退出程序" }
default { Write-Host "未知命令" }
}
4.3 通配符匹配
php
$file = "report.txt"
switch -Wildcard ($file) {
"*.txt" { Write-Host "文本文件" }
"*.jpg" { Write-Host "图片文件" }
default { Write-Host "其他类型" }
}
五、循环结构 foreach
语句
foreach
用于遍历集合中的每个元素。
5.1 基本语法
perl
foreach ($item in 集合) {
# 对每个元素执行操作
}
5.2 示例:遍历数组
perl
$numbers = 1, 2, 3, 4, 5
foreach ($num in $numbers) {
Write-Host "当前数字: $num"
}
5.3 结合 Get-ChildItem
遍历文件
vbnet
Get-ChildItem C:\Temp | ForEach-Object {
Write-Host "文件名: $($_.Name)"
}
六、循环结构 while
语句
while
在条件为真时持续执行循环体。
6.1 基本语法
bash
while (条件) {
# 条件为真时执行
}
6.2 示例:等待进程结束
arduino
$process = Start-Process notepad -PassThru
while (!$process.HasExited) {
Write-Host "记事本正在运行..."
Start-Sleep -Seconds 1
}
Write-Host "记事本已关闭"
6.3 do-while
循环(至少执行一次)
perl
$count = 0
do {
Write-Host "计数: $count"
$count++
} while ($count -lt 3)
七、break
和 continue
关键字
7.1 break
:退出循环
perl
for ($i = 0; $i -lt 10; $i++) {
if ($i -eq 5) {
break
}
Write-Host "当前数字: $i"
}
# 输出 0-4
7.2 continue
:跳过当前迭代
perl
for ($i = 0; $i -lt 10; $i++) {
if ($i % 2 -eq 0) {
continue
}
Write-Host "奇数: $i"
}
# 输出 1,3,5,7,9
八、循环结构 for
语句
for
是经典的计数循环,适合已知迭代次数的场景。
8.1 基本语法
ini
for (初始化; 条件; 迭代) {
# 循环体
}
8.2 示例:计算自然数和
bash
$sum = 0
for ($i = 1; $i -le 5; $i++) {
$sum += $i
}
Write-Host "1到5的和为: $sum"
九、循环结构 switch
循环
switch
通常用于条件分支,但也可以结合 for
或 foreach
实现循环效果。
9.1 示例:结合 foreach
的 switch
php
$files = @("report.txt", "image.jpg", "data.csv")
foreach ($file in $files) {
switch -Wildcard ($file) {
"*.txt" { Write-Host "文本文件: $file" }
"*.jpg" { Write-Host "图片文件: $file" }
default { Write-Host "其他文件: $file" }
}
}
总结
PowerShell 的控制结构(条件判断、循环、脚本调用)是自动化任务的核心工具。通过 if
和 switch
实现条件分支,foreach
、while
和 for
处理循环逻辑,结合 break
/continue
精准控制流程,可以高效完成系统管理、数据处理等任务。与其他脚本语言的交互能力进一步扩展了其应用场景,使其成为跨平台自动化的重要工具。