Arrays 为什么要将arraylist的索引添加到arraylist本身?

Arrays 为什么要将arraylist的索引添加到arraylist本身?,arrays,powershell,Arrays,Powershell,我正在编写一个脚本,动态地在屏幕上生成一个恰好包含Exchange服务器的广告站点列表(具体地说,使用Get-ExchangeServer |%{Get-ADSite$.Site}| Sort-Unique),当我生成这样的列表时,该部分工作得很好: function SiteChoiceMenu { $sites = Get-ExchangeServer | % {Get-ADSite $_.Site} | Sort -Unique $siteCount = $sites.count $bul

我正在编写一个脚本,动态地在屏幕上生成一个恰好包含Exchange服务器的广告站点列表(具体地说,使用
Get-ExchangeServer |%{Get-ADSite$.Site}| Sort-Unique
),当我生成这样的列表时,该部分工作得很好:

function SiteChoiceMenu {
$sites = Get-ExchangeServer | % {Get-ADSite $_.Site} | Sort -Unique
$siteCount = $sites.count
$bullets = New-Object -TypeName System.Collections.ArrayList($null)

for ($i=0;$i -lt $siteCount;$i++) {
    $index = $i+1
    $bullet = "$index. " + $sites[$i].Name
    $bullets.Add($bullet)
}
foreach ($bullet in $bullets) {Write-Host $bullet}
$siteChoice = Read-Host "Enter choice"

if ($siteChoice -in 1..$siteCount) { $siteChosen = $sites[$siteChoice-1]; return $siteChosen }
}

$siteChosen
当我运行此代码时,我有5个站点具有Exchange服务器,因此它会生成如下列表:

1. Site 1
2. Site 2
0
1
2
3
4
5

Name                  HubSiteEnabled
Site1                 False
等等。当我将$SiteSelected写入屏幕时,输出如下所示:

1. Site 1
2. Site 2
0
1
2
3
4
5

Name                  HubSiteEnabled
Site1                 False
当我进入代码时,我可以看到“SiteSelected”被设置为上面的确切输出。当我查看Arraylist时,$子弹,它只显示我希望它显示的字符串。现在,我尝试的是使用普通数组而不是ArrayList集合对象,它不显示上述行为。当我在屏幕上写出$siteSelected时,它只包含站点。想知道为什么吗?

$bullet.Add($bullet)
返回对象添加到中的索引。因为不将其存储在变量中,所以返回的int在管道中累积

$thorwaway=$bullets。添加($bullet)
将隐藏它


这只是使用.NET对象和方法时必须注意的事项之一。

是否应在foreach循环中添加一行带有$throwaway变量的新行?或者在调用add方法之前添加变量?嗯。。。我想我看到了,但是当我用add方法将变量添加到行中时,它仍然输出最后一个索引。。。这很奇怪,因为有六个索引(0-5),但只有5个站点。记住:“return”语句对于我们C/C++/C#程序员来说只是一个方便的关键字。在Powershell中,函数不会“返回”一件事,而是返回任意数量的对象。任何未被变量“捕获”的语句都将在管道中累积。这就是为什么
$siteselected
包含所有这些数字,然后才是您实际选择的站点。嗯,是的。我不知道。我只想让它返回广告网站。有趣的。。。再次感谢!然后我将使用一个普通数组。