只是看看是否有人能让我超越这个障碍..尝试过很多东西并且几乎拥有它但是通配符不匹配。我有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" }
}
}
答案 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
它会告诉你所有可用的属性。