PowerShell开发:从命令起步,构建基础函数与脚本模块
立即解锁
发布时间: 2025-09-13 00:16:54 阅读量: 4 订阅数: 9 AIGC 

### PowerShell 开发:从命令起步,构建基础函数与脚本模块
#### 1. 开发流程的重要性
在 PowerShell 开发中,发现、测试和完善命令的过程贯穿始终。很多人在 VS Code 中花费大量时间编写代码,运行却失败,原因在于忽视了发现、测试和编码的流程。利用 VS Code 中的 PowerShell 扩展可以方便地查找、输入和运行命令,若运行失败能及时修复并重复该过程,成功后将代码复制到脚本中。这一过程能确保命令的正确性,减少脚本中的错误。
#### 2. 明确需求
有句话说得好:“PowerShell 简单,Windows 复杂”。由于长期使用图形用户界面(GUI),很多人对 Windows 底层操作并不了解。比如,不清楚分区、磁盘、逻辑磁盘和磁盘卷的区别,这会使使用 PowerShell 进行底层控制变得困难。在 PowerShell.org 的论坛上,常有人询问代码问题,却因使用 PowerShell 访问 .NET Framework 底层内容,导致问题本质并非 PowerShell 本身,而是复杂的 .NET 相关内容。还有人询问关于 USB 设备插入事件列表的问题,这其实是在处理底层操作系统时遇到的难题。因此,发现、测试和编码的过程至关重要,先明确要做什么以及如何做,再利用交互式 PowerShell 控制台进行操作,最后用脚本编辑器将操作组合成脚本。
#### 3. 实践:更改服务登录名和密码
- **任务说明**:之前设计了一个更改服务登录名和密码的工具,不能使用 `Set-Service` 命令,需使用 CIM。主要任务是找到能更改服务登录名和密码的 CIM 类,可借助搜索引擎,提示是类名以 `Win32_` 开头。同时要确保能使用该类完成任务,需在 CIM 中调用相关内容。实验时可选择 Background Intelligent Transfer Service (BITS) 或 Print Spooler 服务,操作 BITS 不会导致 Windows 崩溃,但在非实验室计算机上操作时要注意,BITS 是 Windows Update 等重要功能的基础,操作完成后需将其重置为以 LocalSystem 登录且无密码。
- **具体操作**
- **查找 CIM 类**:通过 Google 搜索“change windows service password”,找到 Microsoft.com 页面(http://mng.bz/1noL),确定 `Win32_Service` 类可实现该功能。
- **查找调用方法**:在 PowerShell 中运行 `Get-Command -verb invoke`,找到 `Invoke-CimMethod` 并阅读其帮助文件,得到更改 BITS 服务启动用户名和密码的命令:
```powershell
$CimMethodParameters = @{
Query = "SELECT * FROM Win32_Service WHERE Name='BITS'"
Method = "Change"
Arguments = @{
'StartName' = 'DOMAIN\User'
'StartPassword' = 'P@ssw0rd'
}
ComputerName = $env:computername
}
Invoke-CimMethod @CimMethodParameters
```
- **命令解释**:使用 `-Query` 是因为需要 `Win32_Service` 的特定实例,而非计算机上的所有服务。`-ComputerName` 参数在针对远程机器时会很有用,这里使用环境变量 `$env:computername` 确保使用正确。命令返回一个对象,`ReturnValue` 为 0 表示成功,22 表示提供的用户名无效,可在编写工具时将返回对象捕获到变量中以确保每台计算机操作成功。
- **重置服务**:操作完成后,使用以下命令将 BITS 服务重置:
```powershell
Invoke-CimMethod -Query "SELECT * FROM Win32_Service WHERE Name='BITS'"
-Method Change
-Arguments @{'StartName'='LocalSystem'}
```
#### 4. 构建基础函数
- **函数原则**:PowerShell 中的基本函数自诞生起就是重要组成部分,是 PowerShell 能理解的多种命令类型之一。构建工具时,函数应遵循范围紧凑和自包含的原则。范围紧凑指函数只做一件事,自包含意味着函数内部信息仅来自声明的输入参数,不依赖外部变量或除文件系统 PSDrives 或环境变量之外的其他来源;函数输出应仅到 PowerShell 管道,创建文件、更新数据库等操作属于动作而非输出。
- **设计输入参数**:以 `Get-MachineInfo` 函数为例,根据设计和使用示例创建基本参数:
```powershell
f
```
0
0
复制全文
相关推荐









