本篇会对条件判断进行实际应用。在管道中可以通过条件判断过滤管道结果,Where-Object会对集合逐个过滤,将符合条件的结果保留。
过滤管道结果
使用Get-Process返回所有的当前进程 ,但是你可能并不对所有的进程感兴趣,然后通过每个Process对象的属性进行过滤。首先得知道每个对象支持那些属性。
PS C:Powershell> Get-Process | select -First 1 | fl * __NounName : Process Name : AcroRd32 Handles : 287 VM : 234819584 WS : 32616448 PM : 63488000 NPM : 14584 Path : C:Program FilesAdobeReader 10.0ReaderAcroRd32 .exe Company : Adobe Systems Incorporated CPU : 96.5334188 FileVersion : 10.1.2.45 ProductVersion : 10.1.2.45 Description : Adobe Reader Product : Adobe Reader Id : 4820 PriorityClass : Normal HandleCount : 287 WorkingSet : 32616448 PagedMemorySize : 63488000 PrivateMemorySize : 63488000 VirtualMemorySize : 234819584 TotalProcessorTime : 00:01:36.5334188 BasePriority : 8 ExitCode : HasExited : False ExitTime : Handle : 3568 MachineName : . MainWindowHandle : 198686 MainWindowTitle : Mastering PowerShell - Adobe Reader MainModule : System.Diagnostics.ProcessModule (AcroRd32.exe) MaxWorkingSet : 1413120 MinWorkingSet : 204800 Modules : {System.Diagnostics.ProcessModule (AcroRd32.exe), System.Diagnostics.ProcessModule (ntdll.dll), Syst em.Diagnostics.ProcessModule (kernel32.dll), Syste m.Diagnostics.ProcessModule (KERNELBASE.dll)...} NonpagedSystemMemorySize : 14584 NonpagedSystemMemorySize64 : 14584 PagedMemorySize64 : 63488000 PagedSystemMemorySize : 302460 PagedSystemMemorySize64 : 302460 PeakPagedMemorySize : 75399168 PeakPagedMemorySize64 : 75399168 PeakWorkingSet : 87871488 PeakWorkingSet64 : 87871488 PeakVirtualMemorySize : 257703936 PeakVirtualMemorySize64 : 257703936 PriorityBoostEnabled : True PrivateMemorySize64 : 63488000 PrivilegedProcessorTime : 00:00:27.7057776 ProcessName : AcroRd32 ProcessorAffinity : 3 Responding : True SessionId : 1 StartInfo : System.Diagnostics.ProcessStartInfo StartTime : 2012/1/13 10:25:34 SynchronizingObject : Threads : {4376, 6636, 8096, 5136...} UserProcessorTime : 00:01:08.8276412 VirtualMemorySize64 : 234819584 EnableRaisingEvents : False StandardInput : StandardOutput : StandardError : WorkingSet64 : 32616448 Site : Container :
根据进程名过滤所有记事本进程。
PS C:Powershell> Get-Process | Where-Object {$_.Name -eq "notepad"} Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 158 7 8800 37264 114 18.41 6204 notepad
根据进程名过滤所有IE进程。
PS C:Powershell> Get-Process | Where-Object {$_.Name -eq "iexplore"} Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 710 23 12832 18160 175 10.51 4204 iexplore 971 39 81000 107580 399 22.20 6764 iexplore 336 13 28516 20096 187 0.34 6792 iexplore 929 35 51020 46568 314 10.42 7192 iexplore 835 26 49200 32360 308 7.82 7952 iexplore
根据company过滤所有产品发布者以”Microsoft”打头的进程:
PS C:Powershell> Get-Process | Where-Object {$_.company -like '*Microsoft*' }| select Name,Description,Company msseces Microsoft Security Clie... Microsoft Corporation notepad 记事本 Microsoft Corporation ONENOTEM Microsoft OneNote Quick... Microsoft Corporation OUTLOOK Microsoft Outlook Microsoft Corporation powershell Windows PowerShell Microsoft Corporation prevhost Preview Handler Surroga... Microsoft Corporation RDCMan RDCMan Microsoft Corporation SearchProtocolHost Microsoft Windows Searc... Microsoft Corporation taskhost Windows 任务的主机进程 Microsoft Corporation
使用别名
因为Where-Object的使用概率比较高,所以有一个很形象的别名 ? 可以使用:
PS C:Powershell> Get-Service | ? {$_.Name -like "B*"} Status Name DisplayName ------ ---- ----------- Running BDESVC BitLocker Drive Encryption Service Running BFE Base Filtering Engine Running BITS Background Intelligent Transfer Ser... Stopped Browser Computer Browser Stopped bthserv Bluetooth Support Service
本文链接: https://www.pstips.net/powershell-where-object.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
好文章,转啦
博主,恭喜发财!
辛卯年(兔)腊月廿四 2012-1-17
朋友,来和你说声新年好!
辛卯年(兔)腊月廿五 2012-1-18
博主文采好啊,(一淘购物http://www.cnoz.org)
当运行get-xxxx命令时,如果正好碰到这个xxxx参数有警告(例如说这个命令以后会被新命令替代之类的),就会导致Where-Object只会去筛选那条警告信息,而不会去筛选真正get出来的信息。
Get-AzureRmVM -WarningAction SilentlyContinue
感谢博主答复,但其实,-WarningAction参数我已经试过了,也是没法筛选出结果的。
举个实例:
get-AzureRMAlertRule -ResourceGroupName -WarningAction 0 | where-object {$_.Name -like “DTU95Check*”}
我刚才已经测试用的就是 get-AzureRMAlertRule这条命令。警告信息是不能被管道给过滤的,但是可以通过-WarningAction SilentlyContinue 隐藏。
后面我又测试了一下,是我正式环境里的where语句的条件写的有问题,才导致没有筛选出来,不加-WarningAction SilentlyContinue也是可以正常筛选的。
请问我用powershell查询的数据长度太长都给省略了,有什么方法让数据全部显示吗
如下,查询的数据长了就给省略了,怎么显示全,看到回复一下,非常感谢
dir C:\ $file -Recurse| Select-Object -ExpandProperty VersionInfo | Select-Object -Property FileName,Fileversion, Productversion
FileName FileVersion ProductVersion
——– ———– ————–
C:\Program Files\Citrix\ICAConfigToo… 7.6.8000.100 7.6.8000.100
C:\Users\admin\Desktop\ImageFull\x86… 7.6.8000.100 7.6.8000.100
C:\Users\admin\Desktop\Virtual Deskt… 7.6.8000.100 7.6.8000.100
FileName FileVersion ProductVersion
——– ———– ————–
C:\Program Files (x86)\Citrix\System… 15.3.8000.7146 15.3