powershell - Powershell - 奇怪的变量值返回
问题描述
我有一个(对我来说)奇怪的脚本结果。这是我的脚本的摘要,它返回相同的结果:
cls
$Init = "AFFAIRES"
$ListeGroupes = @()
$NomGrScan = "AFFAIRES"
$Grp0 = New-Object psobject
$Grp0 | Add-Member -Name "Nom" -MemberType NoteProperty -value $Init
$Grp0 | Add-Member -Name "Scan" -MemberType NoteProperty -value "N"
$ListeGroupes += $Grp0
$LGroupes1 = @()
$LGroupes1 += $ListeGroupes
write-host "Grp0 : $($Grp0.Nom) - $($Grp0.scan)"
write-host "ListeGroupes : $($ListeGroupes.Nom) - $($ListeGroupes.scan)"
write-host "LGroupes1 : $($LGroupes1.Nom) - $($LGroupes1.scan)"
($LGroupes1 | where {$_.nom -eq "$NomGrScan"}).scan = "O"
write-host "============================================="
write-host "Grp0 : $($Grp0.Nom) - $($Grp0.scan)"
write-host "ListeGroupes : $($ListeGroupes.Nom) - $($ListeGroupes.scan)"
write-host "LGroupes1 : $($LGroupes1.Nom) - $($LGroupes1.scan)"
当我在我的电脑上运行它时,我得到:
Grp0 : AFFAIRES - N
ListeGroupes : AFFAIRES - N
LGroupes1 : AFFAIRES - N
=============================================
Grp0 : AFFAIRES - O
ListeGroupes : AFFAIRES - O
LGroupes1 : AFFAIRES - O
在脚本的第 15 行,我只更改$LGroupe1
. 为什么它也会改变$ListeGroupe
and的值$Grp0
?
我不明白为什么我没有得到:
Grp0 : AFFAIRES - N
ListeGroupes : AFFAIRES - N
LGroupes1 : AFFAIRES - N
=============================================
Grp0 : AFFAIRES - N
ListeGroupes : AFFAIRES - N
LGroupes1 : AFFAIRES - O
解决方案
在 Powershell 中,对象(如 中的值$Grp0
)被视为引用。因此,将变量分配给现有对象会得到您 - 不是新对象 - 而是对同一对象的另一个引用。
$a = New-Object PSObject -Property @{ prop1='a' ; prop2='b' }
$b = $a
$b
指向与 相同的对象$a
。对一个的更改会影响另一个。
解决此问题的一种可能方法是使用Copy()
方法 on PSObject
。
$a = New-Object PSObject -Property @{ prop1='a' ; prop2='b' }
$b = $a.PSObject.Copy()
现在,$a
并$b
指向不同的对象,并且对其中一个的更改不会影响另一个。
请注意,Copy()
仅执行浅拷贝。
推荐阅读
- java - 如何在java中使用indexOf方法进行双数组
- wordpress - 删除 wordpress 上的病毒
- ms-access - 访问 VBA:没有当前记录
- selenium - Selenium Grid, Protractor - 你能限制只能在某个节点上执行的能力吗
- gallery - lightgallery 不好用
- oop - 如何在面向对象编程中启动方法链?
- android - 从 Fragment Android 永久更改 MenuItem 的颜色
- ios - 如何显示一个屏幕 3 秒,然后切换到下一个屏幕?
- php - 如何在同一字段PHP中分解多个ID
- python - CNN 与 Python 和 Keras