$LogsPath = '\\someserver\somepath\*'
$LogsProperties = Get-ChildItem -Path $LogsPath -recurse |
Select-String -Pattern '[a-z]' |
Select-Object -Property Filename, Path, Line
$Array = @()
$LogsProperties | foreach {
$Array += $LogsProperties
}
上面的查询将创建一个具有以下值的数组
(破折号是制表符/列)
文件名--------------------------路径------------------- -------------------------------------------线
FName1 LName1.txt ----------- \\ someserver \ somepath \ FName1 LName1.txt ------------- XXX值
FName2 LName2.txt ----------- \\ someserver \ somepath \ FName1 LName1.txt ----------- YYY值
FName3 LName3.txt ----------- \\ someserver \ somepath \ FName1 LName1.txt ------------- ZZZ值
$Array[0]
返回:
FName1 LName1.txt ----------- \\ someserver \ somepath \ FName1 LName1.txt ------------- XXX值
有人可以告诉我如何使用值搜索元素的索引
下面的功能不适用于我
$array.indexof('XXX Value')
0 <-- expected result, index of the array
,并将在下面返回错误
方法调用失败,因为[System.Object []]不包含 名为“ indexof”的方法。在线:20字符:15 + $ array.indexof <<<<('XXX值') + CategoryInfo:InvalidOperation:(indexof:String)[],RuntimeException + FullyQualifiedErrorId:MethodNotFound
答案 0 :(得分:1)
因此您的$logsProperties
已经 一个数组。您可以使用Where-Object
或Where
数组方法进行过滤:
$logsProperties = Get-ChildItem -Path \\someserver\somepath\* -Recurse |
Select-String -Pattern '[a-z]' |
Select-Object -Property FileName, Path, Line
过滤:
$logsProperties | Where-Object Line -like '*xxx value*'
或:
$logsProperties.Where{$_.Line -like '*xxx value*'}
答案 1 :(得分:1)
如The Incorrigible1's answer中所指出,$LogsProperties
已经是一个数组,其元素是具有属性[pscustomobject]
,FileName
和{{1 }}。
(您尝试从Path
创建Line
不仅是不必要的,而且是无效的,因为$Array
的元素最终都引用了$LogsProperties
所引用的数组整体上。)
为了在数组实例 [1] 上使用$Array
方法,需要 PSv3 + 。
PSv3 +还允许您使用member enumeration,因此可以将$LogsProperties
应用于.IndexOf()
以便搜索.IndexOf()
属性值的数组:
$LogsProperties.Line
在 PSv2 中,您可以使用.Line
循环来确定索引:
$LogsProperties.Line.IndexOf('XXX Value') # -> 0
[1]类型foreach
(所有阵列的基本类型)也具有a static .IndexOf()
method,在PSv2中也可用。但是,由于需要搜索$i = 0
foreach ($obj in $LogsProperties) { if ($obj.Line -eq 'XXX Value') { break }; ++$i }
if ($i -eq $LogsProperties.Count) { $i = -1 }
# $i now contains the index of the matching element or -1, if not found.
的数组元素的System.Array
属性值,所以这无济于事,除非首先构造仅具有.Line
属性值的单独数组