PowerShell中对象的选择、排序、分组和测量操作
立即解锁
发布时间: 2025-08-14 00:54:52 阅读量: 25 订阅数: 27 AIGC 


精通PowerShell脚本编写:自动化与简化任务
# PowerShell 中对象的选择、排序、分组和测量操作
## 1. 过滤对象
在 PowerShell 中,`Where-Object` 是一个非常有用的命令,它可以基于指定的条件过滤对象。以下是几种常见的使用方式:
### 1.1 使用属性和值进行过滤
```powershell
Get-Process |
Where-Object -Property StartTime -Value (Get-Date 9:00:00) -GT
```
上述代码会筛选出启动时间晚于 9:00:00 的进程。不过,更易读的写法通常是使用脚本块来描述条件。
### 1.2 使用 FilterScript 参数进行复杂过滤
```powershell
Get-Service | Where-Object {
$_.StartType -eq 'Manual' -and
$_.Status -eq 'Running'
}
```
此代码会筛选出启动类型为手动且当前正在运行的服务。输出示例如下:
| Status | Name | DisplayName |
| ---- | ---- | ---- |
| Running | Appinfo | Application Information |
| Running | AppXSvc | AppX Deployment Service (AppXSVC) |
| Running | BluetoothUserServ… | Bluetooth User Support Service_535639 |
| Running | BTAGService | Bluetooth Audio Gateway Service |
### 1.3 避免错误的过滤顺序
在进行过滤时,条件的评估顺序很重要。例如,在测试远程计算机上文件的最后写入时间时,先使用 `Test-Path` 可以避免因计算机或文件不存在而引发的错误。
```powershell
$date = (Get-Date).AddDays(-90)
'Computer1', 'Computer2' | Where-Object {
(Test-Path "\\$_\c$\temp\file.txt") -and
(Get-Item "\\$_\c$\temp\file.txt").LastWriteTime -lt $date
}
```
## 2. 选择和排序对象
### 2.1 Select-Object 命令
`Select-Object` 可以对输入管道中的对象进行操作,包括选择属性子集、更改属性或添加新属性,还能限制返回的对象数量。以下是一些常见的用法:
- **查看对象的所有属性**:
```powershell
Get-Process -Id $PID | Select-Object *
```
这是查看对象所有可用属性的便捷方法,有时可作为 `Get-Member` 的替代。
- **按名称限制返回的属性**:
```powershell
Get-Process | Select-Object -Property Name, Id
```
输出示例:
| Name | Id |
| ---- | ---- |
| Aac3572DramHal_x86 | 9904 |
| Aac3572MbHal_x86 | 11868 |
| AacKingstonDramHal_x64 | 5144 |
| AacKingstonDramHal_x86 | 11724 |
| AcPowerNotification | 11752 |
- **使用通配符限制返回的属性**:
```powershell
Get-Process | Select-Object -Property Name, *Memory*
```
由于 `Memory` 通配符匹配多个属性且选择的属性超过 4 个,输出将以列表形式显示。
- **排除某些属性**:
```powershell
Get-Process | Select-Object -Property * -ExcludeProperty *Memory*
```
- **选择管道中的前几个或后几个对象**:
```powershell
Get-ChildItem C:\ -Recurse | Select-Object -First 2
Get-ChildItem C:\ | Select-Object -Last 3
```
- **跳过开头或结尾的项目**:
```powershell
Get-ChildItem C:\ | Select-Object -Skip 4 -First 1
Get-ChildItem C:\ | Select-Object -Skip 2 -Last 1
```
- **按索引选择对象**:
```powershell
Get-ChildItem C:\ | Select-Object -Index 3, 4, 5
```
- **在 PowerShell 7 及以上版本中排除特定索引**:
```powershell
Get-ChildItem C:\ | Select-Object -SkipIndex 3, 4, 5
```
### 2.2 计算属性
`Select-Object` 可以使用计算属性来添加新属性或重命名现有属性。计算属性使用哈希表来描述,常见的格式如下:
```powershell
@{ Name = 'PropertyName'; Expression = { 'PropertyValue' } }
@{ Label = 'PropertyName'; Expression = { 'PropertyValue' } }
@{ n = 'PropertyName'; e = { 'PropertyValue' } }
@{ l = 'PropertyName'; e = { 'PropertyValue' } }
```
以下是一些示例:
```powershell
Get-Process | Select-Object @{ Name = 'ProcessID'; Expression = 'ID' }
Get-Process | Select-Object @{ Name = 'ProcessID'; Expression = { $_.ID } }
```
当属
0
0
复制全文
相关推荐









