PowerShell 从基础到实战 3(控制结构与脚本交互)

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)

七、breakcontinue 关键字

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 通常用于条件分支,但也可以结合 forforeach 实现循环效果。

9.1 示例:结合 foreachswitch

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 的控制结构(条件判断、循环、脚本调用)是自动化任务的核心工具。通过 ifswitch 实现条件分支,foreachwhilefor 处理循环逻辑,结合 break/continue 精准控制流程,可以高效完成系统管理、数据处理等任务。与其他脚本语言的交互能力进一步扩展了其应用场景,使其成为跨平台自动化的重要工具。

相关推荐
原生高钙1 小时前
一文了解 WebSocket
前端·面试
uhakadotcom2 小时前
next.js和vite的关系傻傻分不清,一文讲解区别
前端·面试·github
小Lu的开源日常2 小时前
为什么计算机用“补码”存储整数?
设计模式·面试·计算机组成原理
薛定谔的算法2 小时前
面试官问hooks函数,如何高效准确的回答?
前端·react.js·面试
yanlele2 小时前
给 35+ 程序员的绝地求生计划书
前端·后端·面试
似水流年流不尽思念3 小时前
Session、Cookie 的工作原理以及优缺点
后端·面试
前端小巷子5 小时前
Vue 3 快速 Diff
前端·vue.js·面试
完美世界的一天5 小时前
Golang 面试题「初级」
开发语言·面试·golang
wayhome在哪6 小时前
前端高频考题(vue)
前端·vue.js·面试
复苏季风6 小时前
面试官:讲讲flex:1 和 flex:auto 有什么区别?
前端·css·面试