Назад | Перейти на главную страницу

Как ускорить работу командлетов PowerShell, использующих параметр -CimSession?

Как сказано в названии, как можно ускорить выполнение этого крошечного скрипта? Правильно ли я использую New-CimSession?

$computers = Get-ADComputer -SearchBase "OU=W2012,OU=Servers,DC=contoso,DC=com" -Filter *

foreach ($computer in $computers) 
{
    Get-ScheduledTask -TaskName "SomeTask" -CimSession (New-CimSession -ComputerName $computer.Name) 
}

Изучите возможность использования фоновых заданий для командлета Get-ScheduledTask. Это запустит команду асинхронно.

foreach ($computer in $computers) {
    start-job -scriptblock {
        #Parse Args
        $CompName = $args[0]
        $TaskName = $args[1]

        Get-ScheduledTask -TaskName $TaskName -CimSession (New-CimSession -ComputerName $CompName)
    } -name( "SchedTask_$($computer)" ) -ArgumentList $computer, "Task Name"
}

После этого вам нужно дождаться, пока ваши задания перейдут в состояние «Завершено», а затем использовать Receive-Job для получения вывода. Школа компьютерных фанатов: узнайте, как использовать вакансии в PowerShell

Просто сделать:

$computers = Get-ADComputer -SearchBase "OU=W2012,OU=Servers,DC=contoso,DC=com" -Filter *
$sessions = New-CimSession -ComputerName $computers.Name

Get-ScheduledTask -TaskName "SomeTask" -CimSession $sessions