【问题标题】:Unable to perform Add-Member: "Array dimensions exceeded supported range."无法执行添加成员:“数组尺寸超出了支持的范围。”
【发布时间】:2018-12-19 11:53:52
【问题描述】:

我有一个名为 $restoreItems 的对象,我想过滤重复的属性值并选择最新的。

请先看看它的成员,以了解我在做什么:

为了能够检查重复项,我需要“DirName”+“LeafName”属性的组合,因为这种组合构建了一个完整的文件路径。

这是我的第一个问题。我无法组合这两个属性并将其添加到该对象。我尝试像这样添加一个新成员:

$restoreItems | Add-Member -NotePropertyName fullPath -NotePropertyValue 
($restoreItems.Dirname + '/' + $restoreItems.LeafName)

此命令运行良好,但在调用时

$restoreItems.fullPath

我收到一条错误消息,指出 “数组尺寸超出了支持的范围。”

还有其他方法可以将 $restoreItems.Dirname + '/' + $restoreItems.LeafName 添加到对象吗?如果是这样,我可能会找到一种方法来根据它们的 DeletedDate 属性排除重复项。

感谢您的帮助。

编辑:这是对象的 .GetType():

【问题讨论】:

  • 你从$restoreItems.GetType()得到什么?请使用此信息编辑您的问题。
  • $restoreItems 是一个集合吗? $restoreItems.Count。我认为您需要将这些属性添加到集合的每个单独对象中。不是整个系列。 $restoreItems | %{Add-Member -NotePropertyName fullPath -NotePropertyValue ($_.Dirname + '/' + $.LeafName)}。话虽如此,您不需要添加该属性,您也可以将该逻辑与Compare-Object 之类的东西一起使用。
  • @EBGreen:我添加了 for .GetType() 的屏幕截图。但是,在我尝试添加成员之前,它看起来是一样的。
  • @Matt:我将尝试为 ForEach-Object 添加各个属性。当您建议可以使用 Compare-Object 实现我的逻辑时,我是否必须为 .DirName + .LeafName 创建一个计算属性才能比较 .DeletedDate?
  • 所以,是的,我以为这是一个我只想检查的数组。 Ansgar Wiechers 的回答应该可以解决。

标签: arrays powershell properties


【解决方案1】:

你的陈述

($restoreItems.Dirname + '/' + $restoreItems.LeafName)

构建一个包含所有目录名、字符串“\”和所有叶名的数组。

你真正想要的是这样的:

$restoreItems | ForEach-Object {
    $fullname = Join-Path $_.DirName $_.LeafName
    $_ | Add-Member -Type NoteProperty -Name FullName -Value $fullname
}

【讨论】:

  • 谢谢,这很好用。我看到 $fullname 是 BaseType System.Object 而不是 System.Array。然而,为什么会这样呢?例如,$restoreItems.DirName 上的 .GetType() 显示 System.Array。因此,我假设我添加的成员不需要是 System.Object 类型。
猜你喜欢
  • 2021-06-08
  • 1970-01-01
  • 2018-05-29
  • 2021-07-03
  • 2021-09-13
  • 2010-11-22
  • 2018-03-30
  • 1970-01-01
相关资源
最近更新 更多