当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell foreach where 对象示例

作者:精品下载站 日期:2024-12-14 05:08:51 浏览:13 分类:玩电脑

PowerShell foreach where 对象示例


您想在 PowerShell 中根据特定条件迭代集合并过滤项目吗?在本 PowerShell 教程中,我将解释如何在 PowerShell 中的 foreach 中使用 where-object。最后,我将向您展示一些与“PowerShell foreach where-object”相关的示例。

要在 PowerShell 中迭代集合并过滤项目,您可以使用 ForEach 循环或 ForEach-Object cmdlet 循环访问每个项目和 Where -Object cmdlet 根据特定条件进行过滤。例如,要查找并显示最近 7 天内修改的所有文件,您可以使用:

Get-ChildItem -Path C:\ -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | ForEach-Object { Write-Host $_.FullName }

此管道列出了 C: 驱动器中的文件,按修改日期过滤它们,并打印它们的全名。

PowerShell foreach where 对象

ForEach 语句用于迭代 PowerShell 中的对象集合。它允许您为数组或集合中的每个项目执行语句块。这是一个简单的例子:

$numbers = 1..5 # Creates an array of numbers 1 through 5
ForEach ($number in $numbers) {
    Write-Host "Number is: $number"
}

此脚本将 $numbers 数组中的每个数字输出到控制台。

ForEach-Object 是与 ForEach 语句等效的 cmdlet,它允许您对管道中的每个项目执行操作。以下是 PowerShell 中的 ForEach-Object 示例:

$numbers = 1..5
$numbers | ForEach-Object {
    Write-Host "Number is: $_"
}

在此示例中,$_ 表示管道中的当前对象,在本例中是从 $numbers 数组中通过管道传输的每个数字。

PowerShell 中的 ForEach 和Where-Object

PowerShell Where-Object 是一个 cmdlet,它根据对象的属性值从集合中选择对象。当您需要在迭代项目之前对其进行过滤时,可以将 Where-ObjectForEachForEach-Object 结合使用。以下是在 ForEach 循环中使用 Where-Object 的方法:

$numbers = 1..5
$numbers | Where-Object { $_ -gt 2 } | ForEach-Object {
    Write-Host "Number is greater than 2: $_"
}

在此管道中,Where-Object 过滤掉大于 2 的数字,然后 ForEach-Object 迭代过滤后的集合。

使用 VS code 执行 PowerShell 脚本后,您可以在下面的屏幕截图中看到输出。

[玩转系统] PowerShell foreach where 对象示例

PowerShell foreach where-object 示例

让我们通过一些实际示例来展示 ForEachWhere-Object 在现实场景中的强大功能。

示例 1:过滤过程

假设您想要列出系统上运行的记事本的所有实例。您可以使用 Where-Object 来过滤这些进程:

Get-Process | Where-Object { $_.ProcessName -eq 'notepad' } | ForEach-Object {
    Write-Host "Notepad Process ID: $($_.Id)"
}

此命令获取所有进程、记事本过滤器,然后输出每个实例的进程 ID。

您可以在下面的屏幕截图中看到输出:

[玩转系统] PowerShell foreach where 对象示例

示例 2:搜索文件

这是 PowerShell foreach where-object 的另一个示例。查找过去 7 天内修改过的文件可能是另一个实际用途:

Get-ChildItem -Path C:\ -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | ForEach-Object {
    Write-Host "File: $($_.FullName) was modified in the last 7 days"
}

此命令在 C: 驱动器中搜索上周修改的文件并输出其完整路径。

示例 3:Active Directory 清理

如果您是管理员,需要禁用 90 天内未使用的用户帐户,您可以运行:

Import-Module ActiveDirectory
Get-ADUser -Filter * -Properties LastLogonDate | Where-Object { $_.LastLogonDate -lt (Get-Date).AddDays(-90) } | ForEach-Object {
    Disable-ADAccount -Identity $_.SamAccountName
    Write-Host "Disabled account: $($_.SamAccountName)"
}

此代码片段获取所有用户帐户,过滤掉过去 90 天内未登录的用户帐户,然后禁用它们。

示例4:日志解析

这是 PowerShell foreach where-object 的最后一个示例。您可能需要解析日志文件以查找错误条目:

Get-Content -Path 'C:\Logs\example.log' | Where-Object { $_ -match 'ERROR' } | ForEach-Object {
    Write-Host "Error found: $_"
}

此命令读取日志文件并打印出包含单词“ERROR”的每一行。

结论

PowerShell 中的 ForEachWhere-Object cmdlet 用于迭代集合和过滤数据。在本 PowerShell 教程中,我通过示例解释了如何在 PowerShell foreach 中使用 where-object

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯