Windows Server 2025 / PowerShell 基础:对象、管道与查询
PowerShell 处理的是对象,也就是带有属性的数据,而不只是屏幕上显示的文字。将查询命令与 Where-Object、Select-Object 和 Sort-Object 配合使用,可以按明确条件筛选、排序和选择服务器信息。
识别当前会话并查看命令帮助
在需要查询的服务器上打开 Windows PowerShell。本只读示例面向 Windows Server 2025 上的 Windows PowerShell 5.1;通过第一项输出中的 PSVersion 和 PSEdition 确认会话类型。另行安装的 PowerShell 7 可能具有不同的模块兼容性。命令查询的是当前会话所在电脑:在管理电脑上运行,就会得到该电脑的数据。账户权限受限时,即使命令不修改配置,也可能只能看到部分信息。
$PSVersionTable
Get-Command Get-Service
Get-Help Get-Service -Examples
Get-Command 检查 Get-Service 是否可用,Get-Help 解释用法和参数,-Examples 请求示例。本地帮助不完整时,应查看相同版本的官方参考,不要改为执行下载的辅助脚本。动词—名词形式的命令名提示其意图:Get 通常查询,Set 通常配置,但仍须查看具体命令的帮助。
在处理输出之前检查属性
服务对象包含 Name(名称)、DisplayName(显示名称)、Status(状态)等属性。应操作这些字段,而不是按屏幕列位置截取文本。第一行最多显示五个服务,第二行检查对象类型的成员,第三行选择 WinRM 的三个属性。可参考 PowerShell 对象与属性说明。
Get-Service | Select-Object -First 5
Get-Service | Get-Member
Get-Service -Name WinRM | Select-Object Name,DisplayName,Status
在 Get-Member 中,MemberType 可以区分属性和方法:属性描述数据,方法可能执行操作。不要只因方法名称看起来有用就调用它。本课只查询和筛选服务,不启动或停止服务;检查最后一项输出是否包含 WinRM 的 Name、DisplayName 和 Status。
用管道连接命令
竖线 | 将命令连接成 PowerShell 管道,向下一步传递对象。Where-Object 保留 Status 为 Running 的服务,Sort-Object 按 Name 排序,Select-Object 选择输出属性。$_ 表示当前正在处理的对象:
Get-Service |
Where-Object { $_.Status -eq 'Running' } |
Sort-Object Name |
Select-Object Name,DisplayName,Status
比较时,只将 Running 改为 Stopped,再次查询,观察返回的服务集合,然后将筛选条件恢复为 Running。更改筛选条件不会启动或停止服务。-eq 比较相等,-ne 比较不等,-gt 比较是否大于,-like 匹配带通配符的模式。比较数字时应检查数据类型,因为文本顺序不一定等于数值顺序。
使用变量并明确单位
以下查询保存本地逻辑驱动器对象,并以吉比字节(GiB)计算总容量与可用空间。根据 Win32_LogicalDisk 文档,DriveType=3 选择本地驱动器,Size 和 FreeSpace 的单位是字节。PowerShell 常量 1GB 等于 1,073,741,824 字节,即一个 GiB;输出列名标明了这一二进制单位:
$labDisks = Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3'
$labDisks | Select-Object DeviceID,
@{Name='SizeGiB';Expression={[math]::Round($_.Size / 1GB,1)}},
@{Name='FreeGiB';Expression={[math]::Round($_.FreeSpace / 1GB,1)}}
结果应包含 DeviceID、SizeGiB 和 FreeGiB。DeviceID 标识驱动器,另外两列分别计算总容量和可用空间,并按 [math]::Round 舍入到一位小数;具体数值与行数取决于实际驱动器。$labDisks 保留驱动器对象,可以再次筛选。Format-Table 应留到最后的屏幕显示阶段,因为它输出的是格式化对象。如果把它放在逗号分隔值(CSV)导出之前,导出的会是格式结构,而不是需要的数据列。导出数据时应保留对象,选择属性后再交给 Export-Csv。
区分查询与更改
- 使用 Get-Command 和 Get-Help 确认命令及参数。
- 使用查询命令记录当前值。
- 更改命令支持 -WhatIf 时,先检查拟执行的操作。
- 单独评估业务影响和恢复方法,不要仅凭预览判断。
- 保留易读的 .ps1 文件,注明运行的电脑和执行上下文。
找不到命令可能是名称拼写错误、模块不可用或 PowerShell 版本不同,并不等同于访问被拒绝。可以直接在控制台练习这些查询;保存为 .ps1 文件不代表自动获准执行该文件。应遵守组织的执行策略与签名要求,不要为运行脚本而一并关闭保护措施。




