PowerShell ForEach-Object参数

时间:2018-02-06 01:17:54

标签: powershell

我目前正在尝试使用Get-RemoteProgram script列出远程计算机上安装的程序。

我不仅要捕获远程程序列表,还要捕获单个系统的直接版本。

RemoteProgram -ComputerName remotecomputername -Property DisplayVersion,VersionMajor
ProgramName                                                 ComputerName        DisplayVersion VersionMajor
-----------                                                 ------------        -------------- ------------
System Center Endpoint Protection                           remotecomputername  4.7.214.0                 4
Microsoft Visual Studio 2010 Tools for Office Runtime (x64) remotecomputername  10.0.50903                4
Synaptics Pointing Device Driver                            remotecomputername  18.0.7.34                18

但是,当我在多个系统中循环播放时,我会完全丢失DisplayVersionMajorVersion字段。

Get-Content -Path C:\Temp\computerlist.txt | ForEach-Object -Begin {RemoteProgram} -Process {RemoteProgram -ComputerName $_ -Property DisplayVersion,VersionMajor}
ProgramName                                                ComputerName
-----------                                                ------------
System Center Endpoint Protection                          remotecomputer
Microsoft Visual J# 2.0 Redistributable Package - SE (x64) remotecomputer
Mozilla Firefox 57.0.2 (x64 en-US)                         remotecomputer
Mozilla Maintenance Service                                remotecomputer

1 个答案:

答案 0 :(得分:2)

这是PowerShell输出格式的一种情况。

返回对象时,您将获得完整对象及其所有属性。

当您尝试显示没有说明的对象时,PowerShell会尽力显示它。这意味着它将决定显示哪些属性,是否将它们显示为表或列表等。

您可以使用Format-*命令覆盖其显示的方式,但为了使用对象,所有信息都在那里。

这意味着如果你将它管道输出到Export-Csv之类的东西,它就会使用所有属性,即使你没有在正常显示中看到它们。

如果您想特别看到它们,请使用Format-*命令,但这些命令仅用于显示;不要将这些命令发送给其他命令。