我正在创建一个创建自定义对象的函数,而我对Powershell还是很陌生。 问题是-我在Powershell命令中得到了我不想要的数字,并认为我做错了。
我在做错什么吗?
function Create_object{
[System.Collections.ArrayList]$global:combo1_info = @()
$combo1_query = QR "SELECT DISTINCT company FROM machine"
if ($combo1_query.Text.Length -gt 0){
$a = 0
$combo1_query | ForEach-Object{
$obj = [PSCustomObject]@{
Id = $a
Company = $_.company
}
$script:combo1_info.Add($obj)
$a = $a + 1
}
}
}
我得到的输出是:
0
1
2
3
4
5
6
7
8
9
10
当我做一个$combo1_info | Format-Table -Wrap
时,我得到了正确的表格,但是不知道为什么在"$script:combo1_info.Add($obj)"
创建它的时候会得到前导数字
PS:自定义function QR SELECT DISTINCT company FROM machine
正常运行。
答案 0 :(得分:2)
首先尝试不使用全局变量。其次,当您拥有动态数组时,应使用List
。该数组用于固定大小的数组。
赞:
$combo1_info = New-Object System.Collections.Generic.List[System.Object]
$combo1_info.Add($obj)
# If you really want an array just covert it
$combo1_info.ToArray()
您的函数将如下所示:
function Create_object{
$combo1_info = New-Object System.Collections.Generic.List[System.Object]
$combo1_query = QR "SELECT DISTINCT company FROM machine"
if ($combo1_query.Text.Length -gt 0){
$a = 0
$combo1_query | ForEach-Object{
$obj = [PSCustomObject]@{
Id = $a
Company = $_.company
}
combo1_info.Add($obj)
$a = $a + 1
}
}
$combo1_info.ToArray()
return $combo_info
}
如果您真的很想使用您的代码,则可以添加$null
来代替输出(输出在此处显示数组的大小):
$script:combo1_info.Add($obj) | $null