【问题标题】:Looping through Multi Array with Wildcard powershell使用通配符 powershell 循环遍历多阵列
【发布时间】:2018-03-08 19:04:38
【问题描述】:

只是看看是否有人可以让我克服这个障碍..尝试了很多东西并且几乎拥有它,但通配符不匹配。我有 2 个阵列会变得很多。一些值在它们旁边有 *,因为我正在使用 like 运算符 - 如果循环遍历单个数组 btw ,所有这些都可以工作

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

值1 值2 值3 值4

第二部分也是这样写的

值1 值2 值3 值4

因为循环,他们一起写成这样。

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" }
    }
}

【问题讨论】:

  • 首先不要在 foreach 循环中使用 $_。 $_ 是保留的变量名。使用非保留名称。
  • 将所有 $_ 更改为 $var 仍然没有成功
  • @LDStewart EBGreen 的意思是您需要将$_ 更改为$item,因为您已为变量命名。如果您正在执行Foreach-Object,您将使用$_
  • 上面的所有 $_ 实例现在都是 $item 除了 $_.DisplayName 并且仍然找不到类似的匹配项
  • "ForEach ($item in $item)" 这没有意义。

标签: powershell multidimensional-array


【解决方案1】:

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

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

其次,我无法从 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

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

【讨论】:

  • 刚刚意识到问题出在哪里——在我的测试机器上,value4 需要是星号 value4 星号才能让类似的操作员工作......以匹配注册表 - 将标记您的响应正确。 $path1 是注册表路径 btw
猜你喜欢
  • 1970-01-01
  • 2022-12-10
  • 2015-08-17
  • 2018-01-15
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多