4

我正在尝试从字符串数组中删除一个项目。它是一个包含 5 个服务器名称的数组,我对数组中的每个服务器运行了一个重新启动函数。我一次只能重新启动 5 台服务器,因此阵列永远不会变得比这更大,但同时我想继续向阵列添加服务器,这样我就可以循环浏览我环境中的所有服务器。当服务器完成重新启动后,我需要从阵列中删除该服务器,以便可以将另一个服务器添加到阵列并对其运行重新启动功能。我已经尝试过该$array.remove方法,但我收到一条错误消息,指出它不适用于字符串数组。我尝试在没有重新启动服务器的情况下重新定义原始阵列

"$balancedout = $balancedout -notlike $server".
4

3 回答 3

5

请注意,PowerShell 使用 .Net 之类的代码。

所以声明数组如下:

 $a = New-Object System.Collections.ArrayList

现在您可以将项目添加到此数组中:

 $a.Add("Server1")
 $a.Add("Server2")
 $a.Add("Server3")

如果你打印你得到的数组:

PS C:\Users\Work> $a
Server2
Server1
Server3

现在 $a 确实有一个 Remove 方法:

 $a.Remove("Server2")

现在如果你打印你得到的数组:

   PS C:\Users\Work> $a
Server1
Server3
于 2013-07-09T21:32:10.557 回答
4

要么使用Joe Tatavaran建议的数组列表(这可能是最优雅的解决方案),要么像这样重新分配数组:

$a = $a | ? { $_ -ne $server }
于 2013-07-09T22:06:14.213 回答
-1

你能把整个服务器列表加载到一个ArrayList? 您可以将其拆分为包含五个项目的数组,然后在每组服务器上工作。

$servers = Get-Content serverlist.txt
$setIdx = -1
$sets = @()
for( $i = 0; $i -lt $servers.Count )
{
    if( $i % 5 -eq 0 )
    {
        $setIdx++
        $sets[$setIdx] = @()
    }
    $sets[$setIdx] += $servers[$idx]
}

foreach( $set in $sets )
{
    Restart-Computer $set[0]
    Restart-Computer $set[1]
    Restart-Computer $set[2]
    Restart-Computer $set[3]
    Restart-Computer $set[4]
}
于 2013-07-10T03:46:02.003 回答