【发布时间】:2015-03-06 22:39:43
【问题描述】:
我有一个属性名称和值的二维数组,我需要将其添加到 PowerShell 对象中。
使用New-Object 和Add-Member 创建和显示这样的对象没有问题:
$obj = New-Object PSObject
$obj | Add-Member NoteProperty IName($fiel.IName)
$obj | Add-Member NoteProperty SName($fiel.SName)
$obj | Add-Member NoteProperty Taggy($fiel.Taggy)
$obj | Add-Member NoteProperty Title($fiel.Title)
Write-Output $obj
但是当我尝试这样的事情时:
for ($k=0; $k -lt $fieldsArray.Count; $k++)
{
$itemobj | Add-Member –MemberType NoteProperty –Name $fieldsArray[$k].InternalName –Value $itemki[$j][$fieldsArray[$k].InternalName]
#Write-Host $k
#Write-Host $fieldsArray[$k].InternalName.ToString()
#Write-Host $itemki[$j][$fieldsArray[$k].InternalName]
}
Write-Output $itemobj
Write-Output $itemobj 将只返回一个应该添加的属性成员,而没有任何整洁的列名。
添加注释掉的部分是为了测试目的,并为所有项目返回正确的值。
我也试过
$itemobj | Add-Member NoteProperty $fieldsArray[$k].InternalName.ToString()($fieldsArray[$k].InternalName)
没有任何改进。
为什么没有添加其他属性成员?
我有我需要的数据。如果我写:
for ($k=0; $k -lt $fieldsArray.Count; $k++)
{
Write-Host $k
Write-Host $fieldsArray[$k].InternalName.ToString()
Write-Host $itemki[$j][$fieldsArray[$k].InternalName]
}
我明白了:
0 ID 1
1 ContentTypeId 0x0108007345CD807822EA4E85691E5C642F3A27
2 ContentType
3 标题任务 0
4 已于 2014 年 11 月 24 日下午 12:29:30 修改
而这些正是我所期望和想要的价值观。问题是将它们作为属性添加到对象中。我认为我不能将变量作为NotePropertyName,但根据我得到的结果,这是一个疯狂的猜测。
$itemki[$j][$fieldsArray[$k].InternalName] 中的某些值是空的 - 可能是这样吗?
忘记所有的数组。它们只是为了上下文:
Write-Host $fieldsArray[$k].InternalName.ToString() # Writes out the correct value
Write-Host $itemki[$j][$fieldsArray[$k].InternalName] # writes out the correct value
$itemobj | Add-Member NoteProperty $fieldsArray[$k].InternalName.ToString()($fieldsArray[$k].InternalName) # The values/property are not added
问题是:为什么不呢? Add-Member 对将值作为变量传递是否有任何限制?空值?
【问题讨论】:
-
代码 sn-ps 缺少数据,因此很难看出您要实现的目标。请考虑发布Minimal, Complete, and Verifiable example。
-
这似乎是一个问题,因为您使用了不同的参数集。在第一个示例中,您使用的是
NotePropertySingleMemberSet,但在第二个示例中,您使用的是MemberSet。 -
如果我们有一些样本数据,我们肯定可以告诉您哪里出了问题。你没有告诉我们
$j或$itemobj是在哪里声明的,但我想我们可以猜到 -
我承认我仍然对这个问题感到困惑。很明显,这里的信息来自 SharePoint,但第一个示例似乎与第二个示例无关。首先,您使用的是自定义函数
IName,SName...,根据图片,没有您从编辑中显示的所有预期输出。在您的第二个示例中,$fieldsarray看起来像这样:="ID","ContentTypeID","ContentType","Title","Modified"?$itemki的结构也让我不得不猜测其中的数据。没有更多信息就不会得到这个。可能只是我。
标签: object powershell properties powershell-ise