如何在 PowerShell 中进行迭代以及如何将中间结果保存在数组或列表中?

如何在 PowerShell 中进行迭代以及如何将中间结果保存在数组或列表中?

我对 PowerShell 完全陌生。我昨天才开始学习。当我找到一个名为“在紧急情况发生之前立即学习 Windows PowerShell”的资源时,我意识到这个标题是多么贴切。

PowerShell 已经提供了一组非常丰富的原语来搜索注册表。但是,我的要求更复杂一些。给定一组 GUID,我想在注册表中找到它们。然后,根据注册表项和值,我想找出它们的依赖关系。

我的目标是提供完整的 COM 依赖关系的详细报告。

我需要了解的基本知识是:

  1. 如何在 PowerShell 中进行迭代?
  2. 如何将中间结果保存在数组或列表中?

答案1

1)使用循环. 标准款式For和均有供应ForeachDo/While

2)使用变量

$strComputers = @("Server1", "Server2", "Server3")
$strComputers.Count
$strComputers[0]
$strComputers[1]
$strComputers[2]

PowerShell 不需要强类型变量,因此要小心神奇的转换。:)

答案2

我们再试一次。

powershell 中的迭代通过以下三种方式之一完成:

  1. 在数组上使用 foreach 命令:Foreach ($item in $array) { #actions }
  2. 使用 Powershell 选择操作来构建数组:$array = Select-childitem -Recurse
  3. 将数组通过管道发送到过滤器:$array | where-object{$_ -like "Search String"}

存储威胁结果的最简单方法是将其添加到初始化数组变量中。

$array = @() #Initialize array
$array += $item #Add item to array

这是在注册表中查找某些内容的一些基本示例代码。

cls
$GUID = "*{3336F667-9049-4D46-98B6-4C743EEBC5B1}*"
$RegPath = "HKLM:\"
$Results = Get-ChildItem $RegPath -Recurse -ErrorAction SilentlyContinue | Where-Object{$_ -like $GUID}
foreach ($item in $Results)
{
    Write-Host $item
}

使用 Get-ChildItem 来搜索注册表是一种糟糕的方法,但它确实有效。

希望这可以帮助

相关内容