将两个PSCustomObjects合并为一个 - PowerShell

3

我需要在PowerShell中将两个输出或两个PSCustomObject合并为一个。例如,

$services = Get-Service | Select Name, Starttype,Status
$processes = Get-Process | Select ID

我需要带有表头Name, Starttype, Status, ID的输出。

我已经尝试创建CSV并将它们连接在一起,但问题是进程ID始于服务完整输出结束时。我需要它们同时进行。

第二,我尝试创建PSCustomObjects,但没有成功。

请帮我提供PowerShell代码。

我要实现的实际代码。

**$exclusionItems = @()
$OasHighItems = @()   
foreach($item in $items){
    $exclusionItems  += [PSCustomObject]@{
        EXCLUSION_BY_NAME_OR_LOCATION = $item.EXCLUSION_BY_NAME_OR_LOCATION
        EXCLUSION_EXCLUDE_SUBFOLDERS = $item.EXCLUSION_EXCLUDE_SUBFOLDERS
        EXCLUSION_ON_READ= $item.EXCLUSION_ON_READ
    }
    
}
foreach($oas in $oashigh){
    $oashighItems += [PSCustomObject]@{
        OAS_PROCESSES_LIST = $oas
    }
}
$Array = @()
$Array = $exclusionItems,$oashighItems
$Array | Update-FirstObjectProperties | Export-Excel $ExcelParams -TableName Table -Show**

3
你是如何将 Get-Service 中的项目与 Get-Process 中的项目关联起来的? - Lee_Dailey
这只是一个例子,我有几个XML文件,每个文件的输出都有不同的PSCustomObject输出。例如,第一个输出有三个标题,第二个输出只有一个标题。我需要将它们合并成一个。 - Chirag
1
@Chirag,如果链接的帖子不能解决您的问题,请使用代表性样本输入和期望输出更新您的问题。 - mklement0
@Chirag - 首先,您需要决定如何将第一个集合中的任何给定项与第二个集合中的任何给定项相关联。您还需要提供一组现实的输入数据以及您希望输出数据的外观。 - Lee_Dailey
1个回答

0

我假设您想通过名称将两个对象连接起来,即将进程名称与服务名称匹配。为此,您可以循环遍历所有进程和服务,仅保留服务名称等于进程名称的那些,并使用计算属性将结果合并为一个对象:

$services = Get-Service;
Get-Process | ForEach-Object {$p = $_;  $services |
                Where-Object{$p.ProcessName -eq $_.Name} |
                    Select-Object Name,StartType,Status,@{n='ID';e={$p.ID}}} 

我的电脑上的输出是:

Name                  StartType  Status    ID
----                  ---------  ------    --
CcmExec               Automatic Running 14856
CmRcService           Automatic Running  5748
FusionInventory-Agent Automatic Running  5996
IBMPMSVC              Automatic Running  3540
IntelAudioService     Automatic Running  6104
... and so on ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接