【发布时间】:2017-04-10 09:27:41
【问题描述】:
所以这看起来很简单,而且很容易猜到结果,但我似乎在 powershell 中得到了一个非常奇怪的结果。
所以本质上我正在构建一个包含未知数量对象的数组,然后针对 .Count 属性运行一个运算符。
例子:
$a = New-Object System.Collections.ArrayList
$n = 0
while ($n -ne 27) {$n++; $a.Add("Test line")}
# Array built, the .Count property should be 27
$bool = $false
$number = 2
if ($number -gt $a.Count) {$bool = $true}
# This correctly gives me $bool as $false
$number = 3
if ($number -gt $a.Count) {$bool = $true}
# This incorrectly gives me $bool as $true, and does so when $number is
# greater than 3.
对此有什么想法吗?我以前从未见过这种情况。上面是一个简化的例子,但本质上我将对象拉入一个数组,使用Read-Host 获取用户输入,我想比较用户输入是否大于(-gt)数组的总数。
【问题讨论】:
-
上面的示例按预期工作,您是否可能在 ISE 中运行脚本,由于某种原因,您认为 $bool 值在运行之间存储为不正确?或者是否有可能在您的原始代码中,您在检查之间设置了 $bool 值,并且只假设 $bool 是作为特定检查的结果分配的?尝试在代码语句中添加 $bool 值以在代码的每个部分之后显示,或使用 ISE 中的断点来缩小此错误值的来源。
-
ISE 将在脚本执行之间保留变量值。而控制台不会,除非变量范围被修改。
-
好建议。我正在 ISE 中编写此内容,但已确认在 powershell 控制台中运行时也会发生这种情况。在运行之间不保存变量,使用断点,我什至使用 Write-Host 在每一步写入每个变量的值。我确认如果 $number 是 0、1 或 2,它可以正常工作。但如果超过 3,则行为不正确。我刚刚又测试了一遍,感觉自己快疯了!
-
更新:我将 .Count 更改为 47,并尝试将 $number 设为 3。这现在可以工作,但随后将 $number 更改为 4,它再次发生。由于某种原因,Powershell 运算符似乎只与 .Count 属性中的第一个数字进行比较。我很迷茫
标签: powershell operators