首页 > 解决方案 > PowerShell - 为什么在这行代码中使用数组?

问题描述

我有以下代码在多个文件中查找字符串,我在这里找到了其中的一部分。

$path = C:\Windows
Set-Location -path $path

$searchWords = 'log.txt'

Foreach ($sw in $searchWords)
{
    Get-Childitem -Path $path -Recurse -include "*.txt","*.dll" | 
    Select-String -Pattern "$sw" | 
    Select Path,LineNumber,@{n='SearchWord';e={$sw}}
}

我不认为我理解的语法是最后一行的这一部分:

@{n='SearchWord';e={$sw}}

我会解释我认为我理解的内容,然后提出问题。

  1. @我认为意味着它是一个数组
  2. n= 是“名称”的简写
  3. 冒号(;) 分隔列的名称和填充列的表达式。
  4. e= 是表达式的简写
  5. {$sw} - 这里需要括号来封装表达式。

问题):

  1. 为什么要使用数组填充此列?
  2. 为什么必须使用表达式而不仅仅是变量'$sw'?

谢谢您的帮助!

标签: powershell

解决方案


它不是数组,而是哈希表。在引用的代码中,使用了计算属性。通常计算的属性是用来计算东西的。例如,可用磁盘空间可以根据此答案计算为百分比:

@{Name = 'Free';Expression = { "{0:N0}%" -f (($_.FreeSpace/$_.Size) * 100) } }

在您使用的示例中,计算属性用于添加一个标签属性,该属性包含在foreach循环的每次迭代中使用的搜索词。


推荐阅读