Powershell - 有没有办法对 ForEach-Object 中的唯一对象进行排序?

Posted

技术标签:

【中文标题】Powershell - 有没有办法对 ForEach-Object 中的唯一对象进行排序?【英文标题】:Powershell - Is there any way to sort unique objects in ForEach-Object? 【发布时间】:2022-01-19 12:15:39 【问题描述】:

我有一个数组,我需要对唯一值和重复值进行排序,并将其显示给Show-ListView。我是制作 PowerShell 脚本的初学者,尤其是 Sitecore,所以我的代码看起来很糟糕,但对我来说很糟糕。

这是目前的代码:

@($rootItem) + @($rootItem.Axes.GetDescendants() | Initialize-Item) | 
    ForEach-Object 
        $currentItem = $_
        Get-ItemField -Item $currentItem -ReturnType Field -Name "*" `
            | ForEach-Object
                $NewValue = $value.Split(",")
                ForEach($i in $NewValue) 
                if($PSItem.Value -match $i -and $PSItem.Name.Contains("Tags"))
                    [pscustomobject]@
                        "Name"=$currentItem.DisplayName
                        "ItemId"=$currentItem.ID
                        "FieldName"=$_.Name
                        "ItemPath" = Get-MediaUrl($currentItem)
                    
Copy-Item -Path $currentItem.ItemPath -Destination $folderToMove.Paths.FullPath;
                
                
                
             
 | Show-ListView

$rootItem 只是这些项目所在的文件夹(sitecore/Media Library/Images)。现在我需要将这些项目复制到另一个文件夹。这实际上不是问题,因为在 Sitecore 中它不会复制重复值,但在 Show-ListView 中会显示它们。

为了描述我遇到的问题,我基本上想获得具有某些标签图像。当你输入一个标签时,一切都很好,但是当我输入一组标签时,例如***,sitecore,它会显示一个具有这两个标签的项目,两次。

我有什么办法排序 ForEach-Object。我现在有Sort-Object -Unique,但我不知道这是否对我有帮助。

【问题讨论】:

sort 将接受管道输入。 将最后一行从 | Show-ListView改为 |Sort-Object -Unique ItemID | Show-ListView @MathiasR.Jessen 非常感谢!成功了! 【参考方案1】:

就像@MathiasR.Jessen 在 cmets 中所说,基本上我必须在代码末尾添加|Sort-Object -Unique ItemID | Show-ListView

现在的工作代码如下所示:

@($rootItem) + @($rootItem.Axes.GetDescendants() | Initialize-Item) | 
    ForEach-Object 
        $currentItem = $_
        Get-ItemField -Item $currentItem -ReturnType Field -Name "*" `
            | ForEach-Object
                $NewValue = $value.Split(",")
                ForEach($i in $NewValue) 
                if($PSItem.Value -match $i -and $PSItem.Name.Contains("Tags"))
                    [pscustomobject]@
                        "Name"=$currentItem.DisplayName
                        "ItemId"=$currentItem.ID
                        "FieldName"=$_.Name
                        "ItemPath" = Get-MediaUrl($currentItem)
                    
Copy-Item -Path $currentItem.ItemPath -Destination $folderToMove.Paths.FullPath;
                
                
                
             
 | Sort-Object -Unique ItemID | Show-ListView

【讨论】:

以上是关于Powershell - 有没有办法对 ForEach-Object 中的唯一对象进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是通过 Powershell 远程启用了 CredSSP

有没有办法在powershell中切换用户以运行没有密码提示的命令?

Powershell:在 PowerShell 中重新加载路径

有没有办法使用 powershell 获取经典 Azure 存储帐户的密钥?

Exchange 2007 邮箱权限(没有 Powershell Cmdlet)

将 PowerShell 命令结果分配给批处理脚本中的变量