我定义了Array
:
function GetNames
{
$names = New-Object System.Collections.ArrayList
$names += "Drin"
$names
}
现在我想从Array
:
$names = GetNames
$firstName = $names[0]
所以现在$firstName
而不是接收Drin
我得到了D
答案 0 :(得分:1)
如果使用$names
检索GetType()
的类型,您将看到$names
实际上是一个字符串 - 因此,如果您访问第一个索引,则会获得第一个字符:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
注意:这是因为您在管道中只有单个元素。要强制$names
成为数组,您必须显式声明它:
$names = @(GetNames)
另请注意,您不必使用New-Object
来创建阵列。您也可以使用以下方式声明它:
function GetNames
{
@('Drin')
}
答案 1 :(得分:0)
如果您按原样运行代码,但在每行之间添加Here is my code :
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile("C:\apace-jmeter-3\bin\Results\outcome.zip", 2, True)
ts.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
Set fso = nothing
Set ts = nothing
WScript.Sleep 5000
Set objShell = CreateObject("Shell.Application")
Set DestFldr=objShell.NameSpace("C:\apace-jmeter-3\bin\Results\outcome.zip")
Set SrcFldr=objShell.NameSpace("C:\Users\chitra.balasubramani\Desktop\Mail")
DestFldr.CopyHere SrcFldr
,则可以获得此代码:
$names.GetType()
通过调用$names = New-Object System.Collections.ArrayList
$names.GetType()
$names += "Drin"
$names.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True ArrayList System.Object
True True Object[] System.Array
,您重新定义了$names += "Drin"
的类型。它不直观(至少对我来说是一个C#dev),但这就是发生的事情。
如果你使用$names
方法,那么它可以正常工作:
.Add(...)
这给出了:
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True ArrayList System.Object 0 True True ArrayList System.Object Drin
$names = New-Object System.Collections.ArrayList
$names.GetType()
$names.Add("Drin")
$names.GetType()
$names[0]
的类型保持不变,您可以获得正确的结果。
正确的方法是避免使用$names
(毕竟是2001年)。而是用ArrayList
来做。试试这个:
@()
这给出了:
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array True True Object[] System.Array Drin
正如Martin在评论中指出的那样,函数应如下所示:
$names = @()
$names.GetType()
$names += "Drin"
$names.GetType()
$names[0]
答案 2 :(得分:0)
不幸的是,有时唯一的解决方案是将变量声明为 [array] 并使用 +=(不带空格) 当数组仅填充 one 值时,我无法看到带有 $arg.id[0] 的整个元素。
工作:[array]$arg+=(Get-AzApplicationGateway)
不工作:[array]$arg += (Get-AzApplicationGateway)
只有这会给我返回 $arg.id[0]
的第一个元素,而不仅仅是字符串的第一个字符。
这看起来确实有问题,事实上它只在 $PSVersionTable
5.1.19041.906