使用Wildcard powershell通过Multi Array循环

时间:2018-03-08 19:04:38

标签: powershell multidimensional-array

只是看看是否有人能让我超越这个障碍..尝试过很多东西并且几乎拥有它但是通配符不匹配。我有2个阵列,将成为很多。有些值在它们旁边有*因为我使用的是类似的运算符 - 如果循环通过单个数组btw

单独

循环的第一部分将按原样写出:

value1 value2 value3 Value4

第二部分也写出了它应该是这样的

value1 value2 value3 value4

他们一起写出这样的循环。

value1 value2 value3 value1 value2 value3 value4 value4

问题是即使$ _在$ .DisplayName -like $ 下面的上下文中使用时注册该值它永远不会返回匹配我也尝试过$ .DisplayName - 喜欢" $ " 如何让通配符在多数组中工作?它工作在单个数组中,但即使我看到多数组中的值返回它不会仅仅转移到实际命令写主机?

不确定我错过了什么。

$DisplayApps = @("value1", "*Value2*", "*value3*")
$Apps = @("Value4")

$MasterApps = @($DisplayApps,$Apps)

ForEach ($item in $masterapps)
{ 
  Write-host $item
    ForEach ($item in $item) 
    { Write-Host $item
      $AppVer = Get-ChildItem -Path $Path1 | Get-ItemProperty | Where-Object { $_.DisplayName -like $item }
         If($AppVer){ Write-Host "YES $item" }
    }
}

1 个答案:

答案 0 :(得分:1)

我尝试在本地运行您的脚本并发现了一些问题。

正如LDStewart在上面的评论中指出的那样,你有点误用了$ _运算符。

其次,我无法从Get-ItemProperty创建的对象中找到名为“DisplayName”的属性,但是,有一个名为“Name”的属性,其中包含当前迭代中项目的名称。

我使用这些更改更新了脚本,在我看来产生了正确的输出:

$DisplayApps = @("value1", "*Value2*", "*value3*")
$Apps = @("Value4")

$MasterApps = @($DisplayApps,$Apps)

ForEach ($item in $masterapps)
{ 
  Write-host $item
    ForEach ($i in $item) 
    { Write-Host $i
      $AppVer = Get-ChildItem -Path $Path1 | Get-ItemProperty | Where-Object { $_.Name -like $i }
         If($AppVer){ Write-Host "YES $i" }
    }
}

如果要调查对象包含的属性类型,可以使用“Get-Member”cmdlet查看它包含的所有属性,事件和方法。例如。尝试运行

Get-ChildItem -Path $PathToOneFile | Get-ItemProperty | Get-Member

它会告诉你所有可用的属性。