powershell - Powershell - 在自定义对象数组列表中查找重复值
问题描述
我有一个带有自定义对象的 Arraylist,并希望找到“作业名”相同的所有对象。Group-Object 不能按我想要的方式工作,因为它只计算所有属性 (10)。我什至开始认为我使用错了 Arraylist。代码中对象的创建只是为了测试,实际上我使用循环来填充我的数组。
$global:BackupJobObjectArray = New-Object System.Collections.ArrayList
function AddBackupJobFoldertoArray ($jobservername, $backupjobfolder, $backupjobname, $jobmandant, $size, $sizeGB, $sizeTB, $BackupServer, $vbkcount, $lastmodifiedfile)
{
$BackupJobObject = New-Object System.Object
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "Jobname" -Value $backupjobname
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "Mandant" -Value $jobmandant
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "Servername" -Value $jobservername
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "Filepath" -Value $backupjobfolder
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "Size" -Value $size
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "SizeGB" -Value $sizeGB
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "SizeTB" -Value $sizeTB
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "Backupserver" -Value $BackupServer
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "VBKCount" -Value $vbkcount
$BackupJobObject | Add-Member -MemberType NoteProperty -Name "LastModified" -Value $lastmodifiedfile
$global:BackupJobObjectArray.Add($BackupJobObject) | Out-Null
}
AddBackupJobFoldertoArray "server01" "folder01" "jobname01" "mandant01" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server02" "folder02" "jobname02" "mandant01" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server03" "folder03" "jobname03" "mandant01" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server04" "folder04" "jobname04" "mandant01" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server05" "folder05" "jobname05" "mandant01" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server06" "folder06" "jobname06" "mandant02" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server07" "folder07" "jobname07" "mandant02" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server08" "folder08" "jobname08" "mandant02" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server09" "folder09" "jobname09" "mandant02" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server10" "folder10" "jobname10" "mandant02" "1000" "100" "10" "backupserver01" "1" "01.01.2001"
AddBackupJobFoldertoArray "server21" "folder16" "jobname16" "mandant03" "1000" "100" "10" "backupserver03" "1" "01.01.2001"
AddBackupJobFoldertoArray "server22" "folder10" "jobname16" "mandant03" "1000" "100" "10" "backupserver03" "1" "01.01.2001"
AddBackupJobFoldertoArray "server22" "folder03" "jobname16" "mandant03" "1000" "100" "10" "backupserver03" "1" "01.01.2001"
AddBackupJobFoldertoArray "server11" "folder11" "jobname11" "mandant01" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server12" "folder12" "jobname12" "mandant01" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server13" "folder13" "jobname13" "mandant01" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server14" "folder14" "jobname14" "mandant01" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server15" "folder15" "jobname15" "mandant01" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server16" "folder16" "jobname16" "mandant02" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server17" "folder17" "jobname17" "mandant02" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server18" "folder18" "jobname18" "mandant02" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server19" "folder19" "jobname19" "mandant02" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
AddBackupJobFoldertoArray "server20" "folder20" "jobname20" "mandant02" "1000" "100" "10" "backupserver02" "1" "01.01.2001"
$global:BackupJobObjectArray | ForEach-Object {$_.psobject.Properties | Group-Object { $_.Jobname } | Format-Table}
解决方案
使用Script-scoping
而不是 Global 因为这应该绰绰有余。
然后$script:BackupJobObjectArray
只在函数内部使用,因为无论如何列表外部都是已知的。
Add-Member
您可以直接使用[PsCustomObject]
并将其添加到列表中,而不是所有这些行。
最后,如果我正确理解了您的问题,您希望获得基于 JobName 的重复对象的表格格式列表,您可以执行以下操作
$BackupJobObjectArray = [System.Collections.Generic.List[object]]::new()
function AddBackupJobFoldertoArray {
param(
[string]$jobservername,
[string]$backupjobfolder,
[string]$backupjobname,
[string]$jobmandant,
[int64]$size,
[int64]$sizeGB,
[int64]$sizeTB,
[string]$BackupServer,
[int]$vbkcount,
[string]$lastmodifiedfile
)
$script:BackupJobObjectArray.Add([PsCustomObject]@{
Jobname = $backupjobname
Mandant = $jobmandant
Servername = $jobservername
Filepath = $backupjobfolder
Size = $size
SizeGB = $sizeGB
SizeTB = $sizeTB
Backupserver = $BackupServer
VBKCount = $vbkcount
LastModified = $lastmodifiedfile
})
}
AddBackupJobFoldertoArray "server01" "folder01" "jobname01" "mandant01" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server02" "folder02" "jobname02" "mandant01" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server03" "folder03" "jobname03" "mandant01" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server04" "folder04" "jobname04" "mandant01" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server05" "folder05" "jobname05" "mandant01" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server06" "folder06" "jobname06" "mandant02" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server07" "folder07" "jobname07" "mandant02" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server08" "folder08" "jobname08" "mandant02" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server09" "folder09" "jobname09" "mandant02" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server10" "folder10" "jobname10" "mandant02" 1000 100 10 "backupserver01" 1 "01.01.2001"
AddBackupJobFoldertoArray "server21" "folder16" "jobname16" "mandant03" 1000 100 10 "backupserver03" 1 "01.01.2001"
AddBackupJobFoldertoArray "server22" "folder10" "jobname16" "mandant03" 1000 100 10 "backupserver03" 1 "01.01.2001"
AddBackupJobFoldertoArray "server22" "folder03" "jobname16" "mandant03" 1000 100 10 "backupserver03" 1 "01.01.2001"
AddBackupJobFoldertoArray "server11" "folder11" "jobname11" "mandant01" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server12" "folder12" "jobname12" "mandant01" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server13" "folder13" "jobname13" "mandant01" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server14" "folder14" "jobname14" "mandant01" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server15" "folder15" "jobname15" "mandant01" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server16" "folder16" "jobname16" "mandant02" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server17" "folder17" "jobname17" "mandant02" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server18" "folder18" "jobname18" "mandant02" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server19" "folder19" "jobname19" "mandant02" 1000 100 10 "backupserver02" 1 "01.01.2001"
AddBackupJobFoldertoArray "server20" "folder20" "jobname20" "mandant02" 1000 100 10 "backupserver02" 1 "01.01.2001"
($BackupJobObjectArray | Group-Object Jobname | Where-Object { $_.Count -gt 1 }).Group | Format-Table
输出:
Jobname Mandant Servername Filepath Size SizeGB SizeTB Backupserver VBKCount LastModified
------- ------- ---------- -------- ---- ------ ------ ------------ -------- ------------
jobname16 mandant03 server21 folder16 1000 100 10 backupserver03 1 01.01.2001
jobname16 mandant03 server22 folder10 1000 100 10 backupserver03 1 01.01.2001
jobname16 mandant03 server22 folder03 1000 100 10 backupserver03 1 01.01.2001
jobname16 mandant02 server16 folder16 1000 100 10 backupserver02 1 01.01.2001
我个人会选择 List 对象,但 ArrayList 也可以。
推荐阅读
- typescript - 使用 typeof 进行回调时丢失推断类型
- c# - 如何通过 Web URL 获取图像并使用 C# 中的 Base64 将其保存到我的 WEB API DB
- julia - 在 Julia 中,Int64 比 Int32 慢吗?
- javascript - 是否存在“!未定义”最终是虚假的情况?我该如何解决这个问题?
- java - 无法在 WSL 2 Windows 中以开发模式访问 Quarkus 应用程序公开的 chrome 中的 localhost 端口
- anaconda - 来自 Anaconda Baseline 的 Conda 安装包
- text - 用于文本分类的 CNN 中的过滤器大小
- python - Python:最快的光线到网格相交?
- javascript - 如何实现 cloudinary 以动态显示图像作为背景?我看不到正确获取它们
- javascript - 如何利用有区别的联合来推断函数的返回类型