PowerShell命令与脚本(8)——循环

ForEach-Object循环

Powershell管道就像流水线,对于数据的处理是一个环节接着一个环节,如果你想在某一环节对流进来的数据逐个细致化的处理,可是使用ForEach-Object,$_ 代表当前的数据。
 
1、对管道对象逐个处理
如果使用Get-WmiObject 获取系统中的服务,为了排版可能会也会使用Format-Table对结果进行表格排版。
但是如果想对每个服务进行更定制化的处理可是使用ForEach-Object
 
2、结合条件处理
ForEach-Object的处理可以包含任意Powershell脚本,当然也包括条件语句
Get-WmiObject Win32_Service | ForEach-Object{
	if($_.ProcessId -gt 3000)
	{"{0}({1})" -f $_.DisplayName,$_.ProcessId}
}
 
3、调用方法
在ForEach-Object中,$_代表当前对象,当然也允许通过$_,调用该对象支持的方法。
下面的例子杀死所有IE浏览器进程:
 

Do While循环

Do和While可能产生死循环,为了防止死循环的发生,你必须确切的指定循环终止的条件。指定了循环终止的条件后,一旦条件不满足就会退出循环。
单独使用While
$n=5
while($n -gt 0)
{
    $n
    $n=$n-1
}
#5
#4
#3
#2
#1
 
终止当前循环
使用continue关键字,可是终止当前循环,跳过continue后其它语句,重新下一次循环。
$n=1
while($n -lt 6)
{
    if($n -eq 4)
    {
        $n=$n+1
        continue
 
    }
    else
    {
        $n
    }
    $n=$n+1
}
#1
#2
#3
#5
 
跳出循环语句
跳出循环语句使用break关键字
$n=1
while($n -lt 6)
{
    if($n -eq 4)
    {
        break
    }
    $n
    $n++
}
 

For循环

如果你知道循环的确切次数可以使用For循环,For循环属于计数型循环,一旦达到最大次数,循环就会自动终止。下面的例子通过循环求1-100的数列和。
$Sum=0
For($i=1;$i -le 100;$i++)
{
	$sum+=$i
}
$sum
 
For循环是特殊类型的While循环
在For循环开始的圆括号中,由分号隔开的语句为循环的控制条件,分别为:初始化循环执行满足的条件增量
For循环的控制语句第一个和第三个可以为空:
$sum=0
$i=1
for(;$i -le 100;)
{
    $sum+=$i
    $i++
}
$sum
 
For循环的特殊应用
上面的For循环示例停留在数字层面上,其实While循环能办到的事,For循环也可以,只是可能有时不方便而已。例如判断域名的例子:
for($domain="";!($domain -like "www.*.*");$domain=Read-Host "Input domain")
{
    Write-Host -ForegroundColor "Green" "Please give a valid domain name."
}
下面的例子演示逐行读取文本文件
for($file=[IO.File]::OpenText("D:\game\test.txt") ; !($file.EndOfStream);$line=$file.ReadLine() )
{
$line;
}
$file.Close()
 

Switch循环

Switch 本是多路分支的关键字,但是在Powershell中由于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 { "n= $_" }
}
 
n= 10
n= 9
n= 8
n= 7
 
有时对集合的处理,在循环中还须条件判断,使用Switch循环可以一部到位,例如:
$nums = 10..7
Switch ($nums)
{
    {($_ % 2) -eq 0} {"$_ 偶数"}
    {($_ % 2) -ne 0} {"$_ 奇数"}
}
 
10 偶数
9 奇数
8 偶数
7 奇数
 
 

 

posted @ 2021-06-25 22:43  Ulysses~  阅读(769)  评论(0编辑  收藏  举报