Mam problem z uzyskaniem tablicy przekazanej do bloku skryptów w pracy początkowej. Czy możesz mi powiedzieć, co robię źle?Przekazywanie tablicy do zadania Get-Job
$bounceBlock = {
param(
[string[]]$list,
[System.Management.Automation.PSCredential]$cred
)
Add-PSSnapin VMware.VimAutomation.Core | Out-Null
Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope User -InvalidCertificateAction Ignore -Confirm:$false | Out-Null
Connect-VIServer -Server servername -Credential $cred -AllLinked
Get-VM -Name $list
}
if ($targets) {
$activeTargets = $targets | Get-Random -Count $prodTargets.Count
$counter = [pscustomobject] @{Value = 0}
$groupSize = 50
$groups = $activeTargets | Group-Object -Property {[math]::Floor($counter.Value++/$groupSize)}
$connection = Connect-VIServer -Server servername -Credential $cred -AllLinked
if ($connection -match "servername") {
foreach ($group in $groups) {
while ((Get-Job -State Running).Count -ge 5) {
Start-Sleep -Seconds 5
}
Start-Job -ScriptBlock $bounceBlock -ArgumentList (,$group.Group.ServerName),$cred
}
Disconnect-VIServer * -Force -Confirm:$false
}
}
Po prostu podzielam tablicę na porcje o wartości 50 (działa), a następnie próbuję uruchomić je jako zadania. Otrzymany błąd wygląda na to, że próbuje uruchomić Get-VM dla jednego serwera, nazywane wszystkimi 50 wartościami dodanymi razem.
'-ArgumentList $ group.Group.ServerName, $ cred' powinno wystarczyć. Jakiej wersji PowerShell używasz? –
Powershell 4. Jeśli próbuję to przekazać, praca wisi na zawsze (lub przynajmniej dłużej niż 20 minut). – Acerbity
Jedna Uwaga dodatkowa, jeśli po prostu spróbuję uruchomić polecenie z regularną tablicą poza pętlą, zadanie wciąż się zawiesza. Start-Job -ScriptBlock $ bounceBlock -ArgumentList $ stuff, $ cred – Acerbity