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}}
我会解释我认为我理解的内容,然后提出问题。
- @我认为意味着它是一个数组
- n= 是 'name' 的简写
- 冒号(;) 将列名和填充列的表达式分开。
- e= 是表达式的简写
- {$sw} - 这里需要括号来封装表达式。
问题):
- 为什么使用数组来填充此列?
- 为什么必须使用表达式而不仅仅是变量“$sw”?
谢谢您的帮助!
回答
它不是数组而是哈希表。在引用的代码中,使用了计算属性。通常计算的属性用于计算东西。例如,可用磁盘空间可以根据以下答案计算为百分比:
@{Name = 'Free';Expression = { "{0:N0}%" -f (($_.FreeSpace/$_.Size) * 100) } }
在您使用的示例中,计算属性用于添加标签属性,其中包含在foreach循环的每次迭代中使用的搜索词。