我有一个对象数组,我正试图操纵它,并且收到一个错误,即RptFile属性不存在。我检查了拼写和所有内容,对于发生的事情感到困惑。
给出错误的代码:
$AllContents | Where-Object {$_.RptFile -eq 'CB-Officer Trial New'}
AllContents | Get-Member returns:
TypeName: Selected.System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
RptFile NoteProperty System.String RptFile=ABL - Branch5206 Daily OD Report
TotalSeconds NoteProperty System.String TotalSeconds=25
所以财产确实存在。知道发生了什么事吗?如果我只输入$ AllContents,我也会得到一个包含该属性的列表。
答案 0 :(得分:4)
您可以在代码之前测试删除严格模式的Set-StrictMode
的价值是什么?
Set-StrictMode -Off
结果如下:
Get-Member -InputObject $AllContents
Get-Member -InputObject $AllContents[0].RptFile
答案 1 :(得分:3)
先尝试
$AllContents[0].RptFile = '<value>'
如果没有这样的东西应该有帮助:
[Your.Interface.Implemented.Explicitly].GetProperty("RptFile").SetValue($AllContents[0], '<value>',$null)
答案 2 :(得分:1)
$rptFile = $AllContents | Select -Expand RptFile | Where { $_ eq 'CB-Officer Trial New' }
答案 3 :(得分:1)
我不确定这是否会有所帮助,并且我确定这类似于线程死灵,但我遇到了同样的问题,这是google上的第一个结果。
我用以下代码创建了相同的问题:
Class A_Class
{
[String] $AProperty
A_Class()
{
$this.AProperty = "Something"
}
}
Class Collection_Of_A_Class
{
[System.Collections.Generic.Dictionary[int,A_Class[]]] $Objects #a dictionary, where i intended each entry to be a A_Class, but which is defined as an array of A_Class
Collection_Of_A_Class()
{
$this.Objects = New-Object 'System.Collections.Generic.Dictionary[[int], A_Class[]]]'
}
[void]AddObject()
{
$this.Objects.Add(0,[A_Class]::New())
}
}
$myCollection = [Collection_Of_A_Class]::New()
$myCollection.AddObject()
$myCollection.Objects[0].AProperty = "SomethingElse"
基本上,我试图访问数组成员的属性,就好像它是单个对象一样。因为字典的数据类型很难键入数组,所以它接受了我的单个对象并将其强制为数组。 结果,我的财产(如前所述)确实不存在。将字典定义更改为:
[System.Collections.Generic.Dictionary[int,A_Class]] $Objects
以及实例化到:
$this.Objects = New-Object 'System.Collections.Generic.Dictionary[[int],[A_Class]]'
解决了这个问题。
您还可以通过以下方式访问以解决问题:
$ myCollection.Objects [0] [0] .AProperty =“ SomethingElse”
在这种情况下,我访问了索引为0的字典对象,并将数组的元素0存储在其中。在这种情况下,该属性实际存在(如所解决)。
我将检查您的代码是否存在导致$ AllContents中的元素为数组而不是单个对象的情况(或在某些情况下导致这种情况,例如假设先前的命令在返回时仅返回一个对象)返回许多对象。)