PowerShell 技能连载 - 对象属性操作

属性操作基础

1
2
3
4
5
6
# 动态添加属性
$process = Get-Process -Id $PID
$process | Add-Member -MemberType NoteProperty -Name 'HostName' -Value $env:COMPUTERNAME

# 属性选择器
Get-Service | Select-Object -Property Name,Status,@{Name='Uptime';Expression={(Get-Date) - $_.StartTime}}

应用场景

  1. 动态数据增强
1
2
3
Get-ChildItem | ForEach-Object {
$_ | Add-Member -MemberType ScriptProperty -Name SizeMB -Value { [math]::Round($this.Length/1MB,2) }
}
  1. 自定义输出视图
1
2
3
4
$diskInfo = Get-CimInstance Win32_LogicalDisk
$diskInfo | Select-Object DeviceID,VolumeName,
@{Name='Total(GB)';Expression={$_.Size/1GB -as [int]}},
@{Name='Free(%)';Expression={($_.FreeSpace/$_.Size).ToString("P")}}

最佳实践

  1. 使用PSObject包装原生对象
1
2
3
4
5
6
$rawObject = Get-WmiObject Win32_Processor
$customObj = [PSCustomObject]@{
Name = $rawObject.Name
Cores = $rawObject.NumberOfCores
Speed = "$($rawObject.MaxClockSpeed)MHz"
}
  1. 扩展方法实现属性验证
1
2
3
4
5
6
7
class SecureProcess {
[ValidatePattern("^\w+$")]
[string]$ProcessName

[ValidateRange(1,100)]
[int]$Priority
}
  1. 利用属性集提升效率
1
2
Update-TypeData -TypeName System.IO.FileInfo -MemberType ScriptProperty 
-MemberName Owner -Value { (Get-Acl $this.FullName).Owner }

PowerShell 技能连载 - 对象属性操作

https://blog.vichamp.com/2025/02/06/powershell-object-properties/

作者

Victor Woo

发布于

2025-02-06

更新于

2025-02-06

许可协议

PowerShell 技术 QQ 群