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