Powershell脚本基于公共键列连接两个函数结果

时间:2016-10-27 16:40:24

标签: powershell

有人可以根据公共密钥列提供PowerShell脚本来连接两个函数结果。

示例:

Result1和Result2有共同的字段'名称'。我想加入两个结果并获取以下信息。

$Result1 = get-wmiobject -ComputerName localhost -Class win32_service
$Result2 = get-service

结果

Name        : wuauserv
DisplayName : Windows Update
Status      : Running
StartMode   : Manual
ProcessId   : 400     

3 个答案:

答案 0 :(得分:0)

使用以下PowerShell脚本根据公共密钥列(名称)加入两个结果。

$Result1=get-wmiobject -ComputerName localhost -Class win32_service
$Result2=get-service 
$Result=@()
for($i=0;$i -lt $Result2.count;$i++)
{
   $startmode=($Result1 | where{$_.Name -eq $Result2[$i].Name})|Select StartMode,ProcessId
   $tempObj=new-object PSObject
   $tempObj | Add-member noteproperty Name $Result2[$i].Name
   $tempObj | Add-member noteproperty DisplayName $Result2[$i].DisplayName
   $tempObj | Add-member noteproperty Status $Result2[$i].Status
   $tempObj | Add-member noteproperty StartMode $startmode.StartMode
   $tempObj | Add-member noteproperty ProcessId $startmode.ProcessId

   $Result += $tempObj
}
$Result

答案 1 :(得分:0)

无需合并两个命令的输出。所有属性都已从Get-WMIObject中删除。 (就我个人而言,我喜欢使用CIM cmdlet而不是WMI)

Get-CimInstance Win32_Service | select Name, DisplayName, State, StartMode, ProcessId

修改:来自gcim的状态输出是Get-Service的状态属性(如果这是一个问题,这里有一个计算的属性来修复它)

Get-CimInstance Win32_Service | select Name, DisplayName, @{Name="Status";Expression={$_.State}}, StartMode, ProcessId

答案 2 :(得分:0)

试试这个

 $result=get-wmiobject -ComputerName localhost -Class win32_service | %{ New-Object psobject -Property @{ objectwmi=$_; objectgetservice=(get-service | where name -eq $_.Name | select -first 1)}    }