我正在学习PowerShell(新手提醒!!),并试图找出为什么看到以下奇怪的行为。 (环境:使用PowerShell 5的Windows 10)
C:\>POWERSHELL Windows PowerShell Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS > $A=(1,2,3) # When a variable stores a new array, ... PS > $A # the elements are shown correctly. 1 2 3 PS > $B=$A # When the array is copied, ... PS > $B # the elements are shown correctly. 1 2 3 PS > $B=($A,4,5,6) # When the variable stores a new array with elements from some other array ... PS > $B # the elements are shown correctly. 1 2 3 4 5 6 PS > $B=($B,7,8,9) # But, when the variable stores a new array with elements from the array currently stored in the same variable, ... PS > $B # something strange is seen Length : 3 LongLength : 3 Rank : 1 SyncRoot : {1, 2, 3} IsReadOnly : False IsFixedSize : True IsSynchronized : False Count : 3 4 5 6 7 8 9 PS >
任何指针正在发生什么?
在input这个问题的时候,我试图分析这个情况。 我看到它的方式:
$B=($A,4,5,6)
使$ B成为一个包含数组元素的数组。
$B=($B,7,8,9)
使$ B成为一个具有数组元素的数组。
显示variables内容的PowerShell CLI函数并不是一直到叶元素,而是停在第二级。
因此最内层的数组(contents == $ A)被显示为一些对象。
这个解释是否正确?
原因是PowerSer只是吹了一个级别。 所以只要看看下面的结果就可以理解了:
$B[0] -> 1,2,3,4,5,6 $B[0][0] -> 1,2,3 # Your $A $b[0][0][0] -> 1 # Etc ... $B[0][1] -> 4 $B[0][2] -> 5 $B[1] -> 7 $B[2] -> 8 $B[3] -> 9
尽管尽管有数组数组,仍然需要多维数组,但可以使用:
$arrayAll = New-Object 'int[,]' (3,3) $arrayAll[2,0] = 42
经过进一步的分析(以及来自tire0011&Mathias R. Jessen&JPBlanc的输入),情况变得更加清晰。
这个问题有两个部分:
(A)数据是否以某种奇怪的格式存储(甚至被破坏)?
(B)如果没有,为什么输出不显示1到9的数字?
PS > ConvertTo-Json -InputObject $B [ [ [ 1, 2, 3 ], 4, 5, 6 ], 7, 8, 9 ] PS >
(A)数据正确存储在“阵列内数组”格式中,没有任何损坏。
(B)PowerShell CLI输出仅显示深度2级的内容,并显示更深层次的对象。 我无法找到这个说法的参考,但最近我得到的是: https : //technet.microsoft.com/en-us/library/hh849922.aspx
-Depth<Int32> Specifies how many levels of contained objects are included in the JSON representation. The default value is 2.
如果我在CLI输出中获得“深度”的参考,我将更新这个答案。