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) }
    }
  2. 自定义输出视图

    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"
    }
  2. 扩展方法实现属性验证

    1
    2
    3
    4
    5
    6
    7
    class SecureProcess {
    [ValidatePattern("^\w+$")]
    [string]$ProcessName

    [ValidateRange(1,100)]
    [int]$Priority
    }
  3. 利用属性集提升效率

    1
    2
    Update-TypeData -TypeName System.IO.FileInfo -MemberType ScriptProperty 
    -MemberName Owner -Value { (Get-Acl $this.FullName).Owner }

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

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

作者

吴波

发布于

2025-02-06

更新于

2025-03-25

许可协议

评论