Windows Powershell ForEach-Object 循环

对管道对象逐个处理

如果使用Get-WmiObject 获取系统中的服务,为了排版可能会也会使用Format-Table对结果进行表格排版。

代码如下:

PS C:Powershell> Get-WmiObject Win32_Service | Format-Table status,DisplayName
-AutoSize

status DisplayName
------ -----------
OK     Adobe Acrobat Update Service
OK     Application Experience
OK     Application Layer Gateway Service
OK     Application Host Helper Service
OK     Application Identity
OK     Application Information
OK     Application Management
OK     ASP.NET State Service

但是如果想对每个服务进行更定制化的处理可是使用ForEach-Object

代码如下:

PS C:Powershell> Get-WmiObject Win32_Service | ForEach-Object {"Name:"+ $_.Disp
layName, ", Is ProcessId more than 100:" + ($_.ProcessId -gt 100)}
Name:Adobe Acrobat Update Service , Is ProcessId more than 100:True
Name:Application Experience , Is ProcessId more than 100:False
Name:Application Layer Gateway Service , Is ProcessId more than 100:False
Name:Application Host Helper Service , Is ProcessId more than 100:True
Name:Application Identity , Is ProcessId more than 100:True
Name:Application Information , Is ProcessId more than 100:True
Name:Application Management , Is ProcessId more than 100:False
Name:ASP.NET State Service , Is ProcessId more than 100:False

结合条件处理

ForEach-Object的处理可以包含任意Powershell脚本,当然也包括条件语句

代码如下:

Get-WmiObject Win32_Service | ForEach-Object {
    if ($_.ProcessId -gt 3000)
    { "{0}({1})" -f $_.DisplayName,$_.ProcessID}
}
Windows Presentation Foundation Font Cache 3.0.0.0(5408)
Microsoft Network Inspection(5260)
BranchCache(4112)
Windows Modules Installer(7656)

调用方法

在ForEach-Object中,$_代表当前对象,当然也允许通过$_,调用该对象支持的方法。
下面的例子杀死所有IE浏览器进程:

代码如下:

PS C:Powershell> Get-Process iexplore

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    883      29    14728      22432   181    34.26   4300 iexplore
    771      28    55552     129152   425     8.56   5732 iexplore
   1216      51   104324     143916   539   572.41   5912 iexplore
    801      25    49200      25372   285     5.99   6252 iexplore
    691      25    57564      95796   333     8.08   6388 iexplore
   1256      38    85848     127012   379    20.37   7856 iexplore

PS C:Powershell> Get-Process iexplore | ForEach-Object {$_.kill()}
PS C:Powershell> Get-Process iexplore
Get-Process : 找不到名为“iexplore”的进程。请验证该进程名称,然后再次调用 cmdlet。
所在位置 行:1 字符: 12
+ Get-Process <<<< iexplore
+ CategoryInfo : ObjectNotFound: (iexplore:String) [Get-Process],
ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.
Commands.GetProcessCommand

(0)

相关推荐

  • Windows Powershell Foreach 循环

    下面举两个例子: 复制代码 代码如下: $array=7..10 foreach ($n in $array) {     $n*$n }   #49 #64 #81 #100   foreach($file in dir c:\windows) {     if($file.Length -gt 1mb)     {         $File.Name     } }   #explorer.exe #WindowsUpdate.log 这里只为了演示foreach,其实上面的第二个例子可以

  • Windows Powershell Switch 循环

    Switch 本是多路分支的关键字,但是在Powershell中由于Switch支持集合,所以也可以使用它进行循环处理.下面举两个例子. 第一个将Foreach循环转换成Switch循环: 复制代码 代码如下: #使用Foreach循环 $nums=10..7 foreach($n in $nums) {     "n=$n" } n=10 n=9 n=8 n=7   #使用Switch循环 $nums = 10..7 Switch ($nums) { Default { "

  • Windows Powershell For 循环

    如果你知道循环的确切次数可以使用For循环,For循环属于计数型循环,一旦达到最大次数,循环就会自动终止.下面的例子通过循环求1-100的数列和. 复制代码 代码如下: $sum=0 for($i=1;$i -le 100;$i++) {     $sum+=$i } $sum For循环是特殊类型的While循环 在For循环开始的圆括号中,由分号隔开的语句为循环的控制条件,分别为:初始化,循环执行满足的条件,增量. For循环的控制语句第一个和第三个可以为空: 复制代码 代码如下: $sum

  • Windows Powershell Switch 语句

    下面的例子将If-ElseIF-Else转换成Switch语句 复制代码 代码如下: # 使用 IF-ElseIF-Else If( $value -eq 1 ) {     "Beijing" } Elseif( $value -eq 2) {     "Shanghai" } Elseif( $value -eq 3 ) {     "Tianjin" } Else {     "Chongqing" }   # 使用 S

  • Windows Powershell IF-ELSEIF-ELSE 语句

    Where-Object 进行条件判断很方便,如果在判断后执行很多代码可以使用IF-ELSEIF-ELSE语句.语句模板: 复制代码 代码如下: If(条件满足){ 如果条件满足就执行代码 } Else { 如果条件不满足 } 条件判断必须放在圆括号中,执行的代码必须紧跟在后面的花括号中. 复制代码 代码如下: PS C:Powershell> $n=8 PS C:Powershell> if($n -gt 15) {"$n  大于 15 " } PS C:Powershe

  • Windows Powershell Do While 循环

    继续与终止循环的条件 do-while()会先执行再去判断,能保证循环至少执行一次. 复制代码 代码如下: PS C:Powershell> do { $n=Read-Host } while( $n -ne 0) 10 100 99 2012 世界末日 为什么不退出 因为条件不满足 怎样才能满足 请输入一个0,试一试 0 PS C:Powershell> 单独使用While 复制代码 代码如下: $n=5 while($n -gt 0) {     $n     $n=$n-1 } 5 4

  • Windows PowerShell是啥?看完本文你就懂它了

    引子 一直很羡慕Linux的命令提示符(当然他们叫Shell).正则表达式,管道,各种神奇的命令,组合起来就能高效完成很多复杂的任务.效率实在是高.流了n年的哈喇子以后,终于有幸用上了Win7,邂逅了cmd的升级版:Windows PowerShell.从此暗爽无比,原来Windows下也有这样的利器呀~ 看看下面的Windows脚本,不到15行有效代码.在Win7下只要右击脚本文件,选择Run with PowerShell,就会自动找到最占内存的10个进程,然后将它们占用的内存画成一个三维饼

  • Windows Powershell 自动化变量

    Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$home 配置信息:例如powershell控制台的大小,颜色,背景等. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等. PS> $HOME C:\Users\test PS> $currentProcessID=$pid PS> $currentProcessID 5356 PS> Get-Process -Id $pid H

  • Windows Powershell 别名

    简短描述 在Windows PowerShell中, 别名就是cmdlets或其他命令的替代名称. 详细描述 别名就是cmdlet或者命令(例如: 函数, 脚本, 文件, 可执行文件. )的替代名称或者说是个昵称. 在使用命令的地方, 你都可以使用别名. cmdlet 的名称由一个动词和一个名词组成,其功能对用户来讲一目了然.但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊.能不能把命令缩短一点呢?于是"别名"就应运而生了.Powershell内部也实现了很多

  • Windows Powershell 介绍和安装

    Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆. powershell需要.NET环境的支持,同时支持.NET对象.微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象.其可读性,易用性,可以位居当前所有shell之首. 当前powershell有四版本,分别为1.0,2.0,3.0 ,4.0 如果您的系统是window7或者Windows Ser

  • Windows Powershell Where-Object 条件过滤

    过滤管道结果 使用Get-Process返回所有的当前进程 ,但是你可能并不对所有的进程感兴趣,然后通过每个Process对象的属性进行过滤.首先得知道每个对象支持那些属性. 复制代码 代码如下: PS C:Powershell> Get-Process | select -First 1 | fl * __NounName                 : Process Name                       : AcroRd32 Handles               

  • Windows Powershell使用管道

    管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示. 传统的Cmd管道是基于文本的,但是Powershell是基于对象. PS> ls | Sort-Object -Descending Name | Select-Object Name,Length,LastWriteTime | ConvertTo-Html | Out-File ls.html PS> Get-Content .ls.html Name Length LastWriteT

  • Windows Powershell属性:描述对象是什么

    属性可以描述一个对象,对象的属性可以被Powershell自动转换成文本,并且输出到控制台.因此可以通过这种方法查看任何对象,例如$host: 复制代码 代码如下: PS C:Powershell> $host Name              : ConsoleHost Version           : 2.0 InstanceId            : 7fefa1fa-fb2e-47c7-a867-c13b123da5c2 UI                : System.

  • Windows PowerShell 微软官方解释

    通过提供一百多种系统管理实用工具.一致的语法.及对普通管理数据更好地导航(如登记或 Windows Management Instrumentation (WMI)),Windows PowerShell 使 Windows 管理员提高了生产力.Windows PowerShell 还包括全面启动 Windows 系统自动化管理任务的脚本编写语言.Windows PowerShell 语言是直观的,并支持贵企业现有的脚本和命令行工具投入.Exchange Server 2007 和 System

随机推荐