gpt4 book ai didi

arrays - Powershell收集行为

转载 作者:行者123 更新时间:2023-12-02 23:55:53 25 4
gpt4 key购买 nike

给出以下代码片段:

$Servers = New-Object System.Collections.ArrayList
$Server = New-Object System.Object
$Server | Add-Member -MemberType NoteProperty -Name "ServerName" -Value ""

$Server.ServerName = "Server1"
$Servers.Add($Server) | Out-Null
$Server.ServerName = "Server2"
$Servers.Add($Server)| Out-Null
$Servers

我希望它能返回:

服务器名称

服务器1
服务器2

但是我得到:

服务器名称

服务器2
服务器2

有人可以解释这种行为吗?

最佳答案

正如PetSerAl在评论中所说,这是因为它是引用类型。当您将变量添加到arraylist时,您将添加引用而不是值本身。因此,当您更改变量时,引用将指向新值。

您应该每次创建一个新对象:

$Server = New-Object PSObject -Property @{ Server = "Server1" }    
$Servers.Add($Server) | Out-Null
$Server = New-Object PSObject -Property @{ Server = "Server2" }
$Servers.Add($Server)| Out-Null
$Servers

如果您不需要实际的对象,则可以直接添加字符串,这将绕过整个问题。我以为您确实需要该对象。

您可以使方法函数创建您的自定义对象类型。在PowerShell 5中,您也可以创建自己的类,但是我只在这里显示一个函数:
function New-MyObject {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[String]
$Server
)
New-Object PSObject -Property @{ Server = $Server }
}
$Servers.Add((New-MyObject -Server "Server1")) | Out-Null
$Servers.Add((New-MyObject -Server "Server2")) | Out-Null

关于arrays - Powershell收集行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45357015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com