【发布时间】:2016-11-16 13:34:54
【问题描述】:
晚上好
这个版本有这个问题
PS C:\temp> $PSVersionTable.PSVersion.Major
4
这是一个非常奇怪的问题...... 尽管有初始化变量,PowerShell 脚本还是能够以某种方式重用以前调用中的变量值。
脚本很简单;为了显示问题,我使用了一个虚拟机列表:
- 将所有虚拟机读入一个数组
- 选择数组中的第一个元素
- 从第 2 步向对象添加新属性
- 问题:如果我第二次运行脚本,新属性已经存在 - 尽管所有变量都已初始化。如果我在新会话中启动脚本,则新属性在第一次运行时会丢失,之后它就已经存在了。
这是简单的代码:
Set-StrictMode -Version 2.0
# Read all Virtual Machines into an Array
$AllVMs = @()
$AllVMs = Get-VM
# Get the 1st Virtual Machine
$VM = $null
$VM = $AllVMs[0]
# Prepare my Property
$MyList = @()
$MyList += "Test"
# If the Property already exists, just add my List
if ($VM.PSobject.Properties.Name -match "MyList") {
$VM.MyList += $MyList
} else {
# My Property does not exist: create it
$VM | Add-Member –MemberType NoteProperty –Name MyList –Value ($MyList)
}
# Give Back my VM Object
$VM
为了测试脚本,我只计算了 MyList-Elements 的数量:
PS C:\temp> $result = c:\temp\testvar.ps1
PS C:\temp> $result.MyList.Count
1
PS C:\temp> $result = c:\temp\testvar.ps1
PS C:\temp> $result.MyList.Count
2
…
有人可以帮我解决这个问题吗?
非常感谢您的帮助!
亲切的问候, 汤姆
【问题讨论】:
-
这个命令返回给你什么:
[Object]::ReferenceEquals((Get-VM|Select-Object -First 1),(Get-VM|Select-Object -First 1))?
标签: powershell variables instance-variables