Ejecución de múltiples bloques de script al mismo tiempo con Start-Job (en lugar de bucle)
¡Hola a todos
He estado buscando una manera de hacer que mi script sea más eficiente y he llegado a la conclusión (con la ayuda de la gente amable de StackOverflow) de que Start-Job es el camino a seguir.
Tengo el siguiente bucle foreach que me gustaría ejecutar simultáneamente en todos los servidores en $ servidores. Tengo problemas para comprender cómo realmente recopilo la información devuelta de Receive-Job y la agrego a $ serverlist.
PS: Sé que estoy lejos de lograr que esto se aclare, pero realmente agradecería algo de ayuda para comenzar, ya que estoy bastante perplejo sobre cómo funciona Start-Job y Receive-Job ..
# List 4 servers (for testing)
$servers = Get-QADComputer -sizelimit 4 -WarningAction SilentlyContinue -OSName *server*,*hyper*
# Create list
$serverlistlist = @()
# Loop servers
foreach($server in $servers) {
# Fetch IP
$ipaddress = [System.Net.Dns]::GetHostAddresses($Server.name)| select-object IPAddressToString -expandproperty IPAddressToString
# Gather OSName through WMI
$OSName = (Get-WmiObject Win32_OperatingSystem -ComputerName $server.name ).caption
# Ping the server
if (Test-Connection -ComputerName $server.name -count 1 -Quiet ) {
$reachable = "Yes"
}
# Save info about server
$serverInfo = New-Object -TypeName PSObject -Property @{
SystemName = ($server.name).ToLower()
IPAddress = $IPAddress
OSName = $OSName
}
$serverlist += $serverinfo | Select-Object SystemName,IPAddress,OSName
}
Notas
Estoy enviando $ serverlist a un archivo csv al final del script Enumero aproximadamente 500 servidores en mi script completo