Arrays 更改数组列名
我有一个数组,其中包含需要修改的Arrays 更改数组列名,arrays,powershell,Arrays,Powershell,我有一个数组,其中包含需要修改的noteproperties。在阅读数组时,我需要编写一些代码来确定数组列的正确标题 此代码已准备就绪,工作正常: $Permissions | Get-Member | ? MemberType -EQ NoteProperty | % { $Column = $Permissions.($_.Name) $GroupResult = Switch ($Column[1]) { 'GROUP' {$Settings[0].Grou
noteproperties
。在阅读数组时,我需要编写一些代码来确定数组列的正确标题
此代码已准备就绪,工作正常:
$Permissions | Get-Member | ? MemberType -EQ NoteProperty | % {
$Column = $Permissions.($_.Name)
$GroupResult = Switch ($Column[1]) {
'GROUP' {$Settings[0].Group + ' '}
'' {break}
Default {$group + ' '}
}
$SiteResult = Switch ($Column[0]) {
'Site' {$Settings[0].Code + ' '}
'' {break}
Default {$site + ' '}
}
$Result = ($GroupResult + $SiteResult + $_.Name).Trim()
}
我现在尝试使用上面生成的$Result
字符串更新/修改现有标题:
$_.Name = $Result
执行此操作时,PowerShell会抛出错误。“Name”是只读属性。
更改数组标题的最佳方法是什么?我还需要删除第2行和第3行,但我可以在之后删除
$Permissions
数组示例,我正在尝试将Plant manager
更新为Plant manager
:
Plant manager | Sales man | Warehouseman
-------------- ---------- -------------
Site | |
Group | Group |
Stuff | Stuff | Stuff
感谢您的帮助。一个选项是使用所需名称添加新的NoteProperty
,并从现有属性复制值
话虽如此,你似乎有点像这样
不如换成一个:
您还可以创建一个
AliasProperty
Get-ChildItem c:\temp | Add-Member -MemberType AliasProperty -Name Measurement -Value Length -PassThru | select Measurement
同意这是过度设计的,但是您可以就地修改对象 假设您的对象数组是
$permissions
,您可以对其进行迭代,添加$result
的一个成员,其值来自属性Plant manager
,然后删除Plant manager
属性:
$permissions | % {
$_ | add-member "$result" -NotePropertyValue $_."Plant Manager"
$_.psobject.properties.remove("Plant Manager")
}
对象属性的只读属性将由对象类型决定。解决这个问题的一种方法是通过
选择*
运行对象。这将根据您的PS版本将对象类型更改为PSSelectedObject或PSCustomObject,并且该属性在此过程中应丢失ReadOnly属性:
$Permissions | Get-Member | ? MemberType -EQ NoteProperty | Select * |% {
我知道它可能重复,但我需要计算
NoteProperty
值中的字符串。没有比使用开关更简单的方法了。除此之外,它还需要是一个数组,因为我输入的脚本接受数组。@DarkLite1-要清楚,您不是在更改数组的列名,而是在更改对象的属性名。数组只包含许多对象。数组:$array[index]
-对象:$object.property
。在你的例子中,你需要修改数组中的每个对象。谢谢你,mjolinor,我尝试了你的建议,但似乎没有修改数组。当尝试$\uName=$Result
时,我可以肯定地看到它接受了新值,但之后就不会保存了。在测试变量中保存整个循环时,它将为空。这可能是使用$\在管道中执行此操作的结果。谢谢Mathias,但是如果您不知道数组将提前多长时间,您如何使用您的建议?您需要为类型为NoteProperty
的每个头计算Name=
部分?工厂经理只是一个例子,但还有很多例子,有些是比利时的,有些不是。这就是为什么我需要基于标题的开关的原因。谢谢arco444,这正是我想要的。关于过度工程,问题是我不能简化生成对象属性名的过程,因为它基于很多变量。因此,几乎每一列都需要计算并重新创建。再次感谢这个伟大的解决方案:)
$Permissions | Get-Member | ? MemberType -EQ NoteProperty | Select * |% {