powershell foreach、while和其他循环的工作原理

学习编程的关键第一步是使用循环。PowerShell foreach、while和其他循环帮助您开发高级代码。...

学习编程的关键第一步是使用循环。谢天谢地,PowerShell将随着您的技能不断增长。

powershell-loops

您可以在循环中框显每天使用的现有命令,以节省时间和精力。当你阅读更多关于MakeUseOf的文章的重要工作时,你的脚本起着很重的作用!

powershell foreach循环:高级数据处理之门

ForEach是ForEach对象的别名。(别名只是PowerShell中命令的快捷方式。)现在是讨论PowerShell处理数据的方式的好时机。

与大多数现代编程语言一样,PowerShell也是面向对象的。PowerShell中的所有内容都是一个对象,这意味着即使变量也有扩展的属性和函数。这就是为什么可以将搜索设置为变量,并最终得到一个结果数组的原因。

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

在某些语言中,处理此数组将是一个多步骤的过程。首先,计算长度,然后计算每一步。

在PowerShell中,您单步遍历数组并使用ForEach对每个数组执行操作。这将为您节省几行代码,如果您有较长的脚本,这将非常有用。例如,下面是一个小脚本,它将使用几个Powershell ForEach循环。它会创建一个ZIP文件,其中包含30天内未打开的所有文件。

使用foreach循环构建文件归档系统

让我们把台阶拆下来。您可以使用Get ChildItem来获取Documents文件夹中的所有文件。环境变量$env:USERPROFILE运行使用当前配置文件的脚本。此变量比硬编码路径更便于移植。搜索结果被分配给变量$MyDocs。然后我们创建ForEach循环,让它逐步遍历$MyDocs中的每个$Doc。

$oldDocs = @()
$MyDocs = Get-ChildItem -Path "$($env:USERPROFILE)\Documents" -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path "$($env:USERPROFILE)\Documents\$((Get-Date -Format MMddyy).toString())" -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination "$($ArchiveFolder.FullName)\$($doc.Name)" -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = "$($env:USERPROFILE)\Documents\$($ArchiveFolder.Name).zip"
Add-Type -AssemblyName "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

在循环中,我们检查每个文件的LastAccessTime属性是否早于30天。我们通过get-Date cmdlet得到它,并使用AddDays函数得到负三十。如果是,则将该文件添加到$myOldDocs数组中。在文件排序完成后,我们将获取已完成的数组并创建一个zip文件。这个过程稍微复杂一点,因为它需要调用一点.NET。如果您不太了解,请不要担心--您可以从TechNet帮助文档中窃取代码。

分解这里发生的事情:我们将把所有的旧文件移到一个以今天的日期命名的超过30天的新目录中。一旦文件夹建立,我们就必须创建同名的ZIP存档。我们将测试以确保存档成功并且.ZIP文件存在,然后删除新文件夹。将此设置为每月运行一次的计划任务。这样可以节省一些空间并保持文档文件夹的整洁。

while和do while:循环条件

如果只想在满足特定条件时运行循环,可以使用While循环。如果您使用一个变量来跟踪计数,请先设置它。

i=0
while(i<10){
Your Steps
i+=1
}

问题是,如果不使用计数器,即使测试为真,也可能希望代码至少运行一次。下面的示例脚本就是这种情况。所以在这些情况下,您需要使用Do While循环。语法略有不同。

do{
Your Steps
}while(Conditional Statement)

对于一个新手程序员来说,使用这些并不是很明显。做典型的日常脚本,你可能不会经常碰到他们。它们特别有用的地方是**一个临时计时器来测试流程的成功与否。

我们将构建一个快速脚本来重新启动远程机器,并在15分钟内无法恢复时发出警报。这个场景假设它是一个不经常重新启动的家庭服务器或其他机器。如果您的电脑通常运行得更快,请随意调整时间。

重新启动并检查:使用do while循环

这个脚本简单一点。首先,使用Restart Computer命令重新启动远程计算机。(我们在这里为重新启动命令使用了一个虚拟IP,请确保用您的计算机的DNS/IP覆盖它)。然后创建计数器变量i并将其设置为0。接下来,使用Start Sleep的Do循环将脚本停止300秒(5分钟)。第二个命令将一个添加到计数器。

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput "Remote Machine not responding, please check."
}
else{
Write-Output "Reboot Succeeded"
}

然后我们有了自己的标准。我们使用Or测试来确保故障生成警报。另一种方法是脚本无休止地循环等待远程机器。为了检查机器,我们正在使用Test-Connection cmdlet。为简单起见,这是PowerShell的Ping。我们添加参数-Quiet,强制它返回True或False,而不是数据包的结果。Or语句的第二部分检查计数器是否超过三个。

循环完成后,我们要创建输出。那意味着我们需要检查一下我们的柜台。这是一个快速的if/else语句。如果大于3,则脚本输出远程计算机没有响应。如果不是,则输出重新启动成功。

其他回路

PowerShell中还有两种其他类型的循环可用。它们在某种程度上与前两个循环相关,只是没有那么常用。For循环的工作方式类似于While示例。在评估中设置所有条件,然后设置cmdlet。

for($i = 0;$i -lt 10;$i++){
Your Steps
}

Do Until循环与Do While循环类似,只需将While语句更改为Until。在示例脚本中,行为是相同的。这是一种风格选择,但Do-While在其他情况下更具通用性。所以,如果你只记得一个,做一个更有用。

powershell foreach loops

PowerShell对每个循环都有帮助。您可以通过在get help中的循环名称之前添加about来获得帮助。然后您可以看到每种类型的示例和其他提示。如果你被卡住了,这些应该是有用的。

继续和你一起成长

此时,您已经掌握了开始构建健壮脚本的大部分技能。无论是自动化您的家庭钻机或节省时间在工作中,循环帮助您的脚本做更多。将这些循环与错误处理相结合,可以使脚本编写超出基本的范围。这为更高级的语言打开了大门。

使用循环创建的聪明PowerShell脚本是什么?在评论中与我们分享。

  • 发表于 2021-03-11 23:17
  • 阅读 ( 442 )
  • 分类:编程

你可能感兴趣的文章

for循环(for loop)和foreach循环(foreach loop)的区别

关键区别–for循环与foreach循环 for循环和foreach循环都是用于重复语句块的控制结构。在程序设计中有重复控制结构来反复执行一个语句块。一种常见的控制结构是回路控制。for循环是用于迭代的控制流结构,允许代码重复执...

  • 发布于 2020-10-19 07:26
  • 阅读 ( 997 )

java8lambdas简介

... names.forEach(name -&gt; System.out.println(name)); ...

  • 发布于 2021-03-12 08:09
  • 阅读 ( 236 )

使用此powershell脚本在windows中自动执行文件加密

文件加密和解密可以是一个工作位。但是,使用PowerShell扩展,可以将进程精简为一行命令。为此,我们需要安装Gpg4win和Powershell模块。使用脚本,我们可以自动化文件加密和解密过程。 ...

  • 发布于 2021-03-13 21:58
  • 阅读 ( 342 )

while循环在计算机编程中是如何工作的

... do while循环与其他循环有何不同?最重要的区别是do while循环在执行代码块之后测试条件,而其他循环在运行代码块之前检查条件。 ...

  • 发布于 2021-03-14 11:34
  • 阅读 ( 240 )

你今天应该掌握的5种javascript数组方法

... 4数组.foreach() ...

  • 发布于 2021-03-18 11:00
  • 阅读 ( 220 )

windows 10任务栏不工作?8常见问题和解决方法

...菜单。从这里,您可以启动命令提示符(Admin)或Windows PowerShell(Admin)窗口。从这些工具中,您可以访问一些工具来执行任务栏修复。 ...

  • 发布于 2021-03-22 19:34
  • 阅读 ( 426 )

8个常见的microsoft应用商店错误及其修复方法

... 如果没有,别担心。对powershell执行系统搜索,右键单击相关结果并选择以管理员身份运行。输入以下内容并按Enter键: ...

  • 发布于 2021-03-26 12:34
  • 阅读 ( 278 )

如何在python中使用for循环

像任何其他编程语言一样,在Python中循环是避免编写重复代码的好方法。但是,与Python的while循环不同,for循环是一个确定的控制流语句,它为您提供了对一系列中的每个项的更多权限。 ...

  • 发布于 2021-03-29 00:57
  • 阅读 ( 260 )

如何在python中使用while循环

Python的while循环可能会让初学者感到困惑。然而,一旦您理解了循环的概念,您就会意识到Python“循环”之前的“while”仅仅是一个条件语句。 ...

  • 发布于 2021-03-29 01:52
  • 阅读 ( 264 )

关于linux中bash for loops的所有知识

... 在一般编程中,for循环有两种主要类型:numeric和foreach。传统上,数字类型是最常见的,但是在bash的用法中,通常是相反的。 ...

  • 发布于 2021-03-29 06:22
  • 阅读 ( 306 )
红烧味的飙
红烧味的飙

0 篇文章

相关推荐