Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 更改数组列名_Arrays_Powershell - Fatal编程技术网

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 * |% {