arrays - 将数组传递给 Get-Job

标签 arrays powershell powercli

我无法将数组传递给 Start-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
    }
}

我基本上将一个数组分成 50 个(工作)块,然后尝试将它们作为作业运行。我得到的错误看起来像是在尝试为单个服务器运行 Get-VM,将所有 50 个值命名为附加在一起。

最佳答案

我当然不是 PS 方面的专家,但首先要解决您如何传入附加的服务器列表;我使用 Get-AzureVM 对 Azure VM 执行类似操作,并将 System.Array 中的 VM 名称列表传递给函数或 cmdlet,例如 $theVMs="MyServer1","MyServer2","MyServer3"等变量
然后我在($theVMs 中的 $vm)上执行 foreach 循环,然后按顺序执行诸如 Get-VM 之类的操作。我按顺序执行此操作,因为 PS 有一些低得多的限制,根据我的经验为 5,通过并行 for 循环执行此操作。

我与 VM 远程交互的典型方式 并为每个 创建一个 PS 作业是使用
$uri = Get-AzureWinRMUri -ServiceName $svc -Name $vmname

 Invoke-Command -ConnectionUri $uri -Credential $creds **-JobName 
 $jobname**    
 -ArgumentList $vmname -ScriptBlock {
 param([string]$thevm) ...
 }

这需要 InstallWinRMCertAzureVM.ps1 脚本,该脚本已在 http://blogs.technet.com 上讨论并提供。 .我定期将其用于 30 台服务器。

关于arrays - 将数组传递给 Get-Job,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32142934/

相关文章:

arrays - 阈值下最大绝对子数组和算法

python - 在 numpy 中混合数组的最快方法?

regex - 移动与给定正则表达式匹配的目录

powershell - 使用 PowerShell 获取 IIS 的具体回收时间

powershell - 如何从 VMware ESXi 5.0 上运行的虚拟机获取文件

php - 从 WooCommerce 中的后元数组变量值获取特定值

c - c-array 如何在内存中存储/表示

在多行中捕获的正则表达式适用于 regex101.com 但不适用于 PowerShell

vmware - 如何在PowerCLI中无提示地运行断开连接-viserver

c# - 我应该使用哪个 VMware API?