Get-Service для многих машин быстро - PullRequest
0 голосов
/ 23 января 2019

Я написал этот скрипт для запроса статуса "KService" для нескольких машин. Это работает, но из расчета около 100 машин каждые 10 минут. Есть ли способ улучшить скорость выполнения этой задачи? У меня есть до 1000 машин одновременно, которые я хотел бы запросить.

function Query-Service
 {
     [CmdletBinding()]
     param
     (
         [Parameter()]
         [ValidateScript({ Test-Connection -ComputerName $_ -Quiet -Count 1 })]
         [ValidateNotNullOrEmpty()]
         [string[]]$ComputerName = $env:COMPUTERNAME
     )
     foreach ($comp in $ComputerName)
     {
         $output = @{ 'ComputerName' = $comp }
         $output."Service Name" = (Get-Service -Name KService -ComputerName $comp).Name
         $output.Status = (Get-Service -Name KService -ComputerName $Comp).Status
         [PSCustomObject]$output | Select-Object "ComputerName", "Service Name", "Status"
     }
 }

Write-Host "Please select the machine list"

Function Get-FileName($InitialDirectory) {

    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $initialDirectory
    #$OpenFileDialog.filter = "CSV (*.csv)| *.csv|TXT (*.txt)| *.txt"
    $OpenFileDialog.ShowDialog() | Out-Null
    $OpenFileDialog.filename

    }

$inputfile = Get-FileName "C:"
$ComputerList = get-content $inputfile
$ErrorActionPreference = "SilentlyContinue"

cls

    foreach ($Computer in $ComputerList) {

            Query-Service $Computer


            }

1 Ответ

0 голосов
/ 23 января 2019

Если мы посмотрим на справку на основе комментариев для команды Get-Service, то увидим, что параметр Computername будет принимать массив.

Get-Help -Full Get-Service

PARAMETERS -ComputerName String [] Получает службы, работающие на указанных компьютерах. По умолчанию используется локальный компьютер.

Введите имя NetBIOS, IP-адрес или полное доменное имя (FQDN) удаленного компьютера. Чтобы указать локальный компьютер, введите имя компьютера, точку (.) Или localhost.

Этот параметр не зависит от удаленного взаимодействия Windows PowerShell. Вы можете использовать параметр ComputerName в Get-Service, даже если ваш компьютер не настроен для запуска удаленных команд.

Попробуйте следующее:

function Query-Service
{
    [CmdletBinding()]
    param
    (
        [Parameter()]
        [ValidateScript( { Test-Connection -ComputerName $_ -Quiet -Count 1 })]
        [ValidateNotNullOrEmpty()]
        [string[]]$ComputerName = $env:COMPUTERNAME
    )
    Get-Service -Name KService -ComputerName $ComputerName | Select-Object "MachineName", "Name", "Status"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...