PowerShell 脚本编写
引言
PowerShell 是一门功能强大的命令行脚本语言,不仅能交互式运行命令,还能将命令组合成脚本文件,实现复杂自动化任务。
本篇文章将带你逐步掌握 PowerShell 脚本开发的基础技能,包括:
- 如何创建和运行
.ps1
脚本 - 如何定义和使用函数
- 如何进行模块化开发并复用你的脚本逻辑
一、PowerShell 脚本入门
脚本文件的创建(.ps1)
PowerShell 脚本文件是以 .ps1
为扩展名的纯文本文件,其中包含一组要执行的 PowerShell 命令。
示例:hello.ps1
# hello.ps1 Write-Output "Hello from PowerShell script!"
可使用任意文本编辑器(推荐 VS Code)创建 .ps1
文件。
执行策略(Execution Policy)
Windows 出于安全考虑,默认 不允许执行脚本,你需要设置执行策略。
查看当前策略:
Get-ExecutionPolicy
临时设置为允许本地脚本运行:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
RemoteSigned:运行本地脚本无需签名,但下载的脚本必须由可信发布者签名。
脚本的运行方法
命令行运行:
.\hello.ps1
指定 PowerShell 执行器运行:
powershell.exe -File .\hello.ps1 pwsh.exe -File .\hello.ps1 # PowerShell 7+
右键"使用 PowerShell 运行"(需配合策略设置)
参数传递和处理
可以在脚本中定义接收外部参数的方式:
示例:带参数的脚本 greet.ps1
param ( [string]$name, [int]$age ) Write-Output "你好,$name,你的年龄是 $age 岁。"
运行时传参:
.\greet.ps1 -name "小明" -age 18
还支持默认值和参数验证:
param ( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$City = "北京" )
二、函数的使用
函数定义和调用
function Say-Hello { Write-Output "Hello from function" } Say-Hello
参数声明和验证
函数也可以带参数,使用 param
块定义:
function Add-Numbers { param ( [int]$a, [int]$b ) return $a + $b } Add-Numbers -a 3 -b 5 # 输出 8
也可以使用位置参数:
function Add { param ($x, $y) $x + $y } Add 10 20
返回值处理
PowerShell 函数默认返回所有输出(包括 Write-Output
)。
推荐使用 return
明确返回:
function Get-Square { param ([int]$num) return $num * $num } $result = Get-Square -num 6 Write-Output $result
函数作用域
函数内部定义的变量默认是局部变量:
function Demo-Scope { $message = "Hello" } Demo-Scope Write-Output $message # 无法访问
如果要从外部访问变量,可使用作用域前缀:
$global:x = 5
三、模块化开发
什么是 PowerShell 模块
模块(Module)是多个函数、脚本、资源的集合,用于组织代码、方便复用。
常见模块类型:
- 脚本模块(
.psm1
) - 清单模块(
.psd1
) - 二进制模块(.dll)
导入和使用模块
使用 Import-Module
导入模块:
Import-Module MyModule.psm1
查看已加载的模块:
Get-Module
调用模块中的函数:
Say-Hello
PowerShell Gallery 简介
PowerShell Gallery 是 PowerShell 的官方模块仓库,你可以下载并安装数千个模块。
安装模块示例:
Install-Module -Name PSReadLine
更新模块:
Update-Module PSReadLine
创建简单的自定义模块
新建 MyModule.psm1 文件,添加函数:
# MyModule.psm1 function Greet-User { param ([string]$name) Write-Output "欢迎你,$name" }
在脚本中导入并调用:
Import-Module .\MyModule.psm1 Greet-User -name "小红"
提示:可以将模块文件放入
$env:PSModulePath
中的路径,让系统自动识别。
四、小结
内容 | 说明 |
---|---|
.ps1 文件 |
PowerShell 脚本扩展名,存储命令 |
param |
用于定义脚本/函数参数 |
Set-ExecutionPolicy |
控制脚本是否允许运行 |
函数 | 封装复用代码,提高结构清晰度 |
模块(.psm1 ) |
组织多个函数,实现可移植性 |
PowerShell Gallery | 官方模块仓库,可下载第三方模块 |
点我分享笔记