从Powershell中的动态字符串数组中删除项目

时间:2013-07-09 21:11:27

标签: arrays powershell

我正在尝试从字符串数组中删除一个项目。它是一个包含5个服务器名称的数组,我对阵列中的每个服务器运行重启功能。我一次只能重启5台服务器,所以阵列永远不会比这更大,但同时我想继续向阵列添加服务器,这样我就可以遍历环境中的所有服务器。当服务器完成重启后,我需要从阵列中删除该服务器,这样我就可以在阵列中添加另一台服务器并对其运行重启功能。我已经尝试了$array.remove方法,但是我得到一个错误,说它对字符串数组不起作用。我尝试重新定义原始阵列而不重启服务器

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

3 个答案:

答案 0 :(得分:4)

请注意,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确实有一个删除方法:

 $a.Remove("Server2")

现在如果您打印阵列,您将获得:

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

答案 1 :(得分:3)

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

$a = $a | ? { $_ -ne $server }

答案 2 :(得分:-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]
}