重要的cmdlet
- Where-Object
- Select-Object
- ForEach-Object
- New-Object
- Sort-Object
Where-Object 是一个过滤器,它的功能非常强大。基本所有获取数据的操作都需要过滤,熟练的掌握过滤器是每一个使用Shell的人的最基本的基本功了 <br> Select-Object 控制输出的属性列,同时还可以添加计算列。 <br> ForEach-Object 循环的重要性无需多言 <br> Sort-Object 排序也不需要多加介绍 <br> New-Object 可以使用.NET的功能,也可以用来自定义类。很有用 我们使用这些工具来做点事情,获取计算机的简介信息。
$result = New-Object -TypeName psobject | Select-Object 'CPU','RAM','VIDEO','DISK','NIC'
$rams = Get-WmiObject Win32_PhysicalMemory
$ramtotal = 0
$rams | ForEach-Object {$ramtotal += $_.Capacity}
$ramtotal = $ramtotal / 1GB -as [int]
$video = Get-WmiObject Win32_VideoController | Sort-Object -Property Name
$disks = Get-WmiObject MSFT_PhysicalDisk -Namespace "root/microsoft/windows/storage" `
-Filter "BusType <> '7' and BusType <> '12' and BusType <> '13'" -ErrorAction Stop `
| Sort-Object -Property __PATH
$result.CPU = (Get-WmiObject Win32_Processor).Name
$result.RAM = "$ramtotal GB, $($rams.speed[0])"
$result.Video = ($video | ForEach-Object {
$VideoRAM = $_.AdapterRAM / 1GB -as [int]
Write-Output "$($_.Caption), $($_.AdapterDACType), $($VideoRAM)Gb"
}) -join ', ';
$result.Disk = ($disks | ForEach-Object {
$DiskSize = $_.Size / 1Gb -as [int];
$DiskType = switch ($_.MediaType) { 3 { 'HDD' } 4 { 'SSD' } 5 { 'SCM' } default { 'Generic' } }
Write-Output "$($DiskSize)Gb $DiskType";
}) -join ', ';
$result.NIC = (Get-NetAdapter -Physical | ForEach-Object {Write-Output "$($_.ifDesc)"}) -join ","
$result
#$result | Export-Csv -Path hard.csv
where的简单例子,使用脚本块的时候,脚本块要始终能够返回布尔值。只要能返回true或false,无论脚本块里包含多少代码。
get-process | Where-Object {$_.id -gt 500 -and $_.id -lt 999 -and $_.handles -gt 400} | sort id,ws
Get-Process | Where-Object {$true}
Get-Process | Where-Object {$False}
这几个cmdlet应该多加练习,熟练掌握。