我正在尝试为MDT部署共享中的所有WIM文件生成报告。基本上,我认为需要对找到的所有WIM文件执行 android:drawablePadding="5dp"
循环。我有我认为应该工作的东西,但显然,它没有。我有多远?
ForEach
我看到的错误是关于$WimPath = "G:\DeploymentShare\Operating Systems"
Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Select-Object -ExpandProperty VersionInfo | Select-Object FileName | ForEach-Object { Get-WindowsImage -ImagePath $_ }
命令的参数不正确。
Get-WindowsImage
我认为我的Get-WindowsImage : The parameter is incorrect.
At line:3 char:147
+ ... t-Object FileName | ForEach-Object { Get-WindowsImage -ImagePath $_ }
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
没有像我认为的那样工作,或者我没有在Select-Object
命令中正确使用管道。
答案 0 :(得分:1)
我是一个PowerShell noob并且没有完全理解这一点,但我认为正在发生的事情可以通过首先关注命令的这一部分来解释:
Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Select-Object -ExpandProperty VersionInfo | Select-Object FileName
为了实现这一目标,我们首先获取路径中的所有*.wim
文件,然后展开VersionInfo属性,然后选择FileName。在控制台中,将显示如下结果:
FileName -------- [files here]
诀窍在于了解PowerShell通过此输出告诉您的内容。您看到FileName
标头的事实意味着该管道有一个 Objects 流,其中一个属性名为FileName
。然后我们将该对象流发送到ForEach-Object
并查看$_
特殊变量。
希望现在发生的事情更清楚了。 Get-WindowsImage -ImagePath $_
想要查看包含* .wim文件路径的字符串值。但我们发送了一个带有一个属性的对象。
您可以通过以下几种方式解决此问题......将ExpandProperty
添加到第二个Select-Object
可能会这样做。但实际上没有理由在那里有两个Select-Object
。我想你可以这样做:
Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Select-Object -ExpandProperty FullName | ForEach-Object { Get-WindowsImage -ImagePath $_ }
这里的技巧是你在Get-ChildItem
的shell中看到的字符串表示不一定显示对象中的每个属性。没有空间。 FileName始终存在,您可以通过检查Get-Member
cmdlet来查看它,如下所示:
Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Get-Member