Запустите команду на всех пультах и ​​получите результаты на локальном компьютере с PowerShell. - PullRequest
0 голосов
/ 04 июля 2018

Я хочу выполнить одну команду удаленно на всех удаленных серверах (примерно 100 серверов). Эта команда собирает все iis и сохраняет их в текстовом файле.

(C:\Windows\System32\inetsrv\appcmd.exe list app >C:\Temp\list.txt)

Естественно, моя проблема в том, как получить один список всех пультов на моем локальном компьютере. Я не хочу собирать каждый список на удаленных серверах.

$Servers = @("remotemachine1", "remotemachine2", "remotemachine3" )


foreach ($server in $Servers) {

    $PSSession=New-PsSession -ComputerName $server

    Invoke-command -Session $PSSession -ScriptBlock {

        Write-Verbose -Message "Server: $env:ComputerName" -Verbose


        C:\Windows\System32\inetsrv\appcmd.exe list app >C:\Temp\list.txt

    }
}
Get-PSSession | Remove-PSSession

Ответы [ 3 ]

0 голосов
/ 04 июля 2018
  1. Создать массив для хранения результатов
  2. Вместо вывода C:\Temp\list.txt используйте Write-Output и сохраните его в переменной
  3. Просто совет: создайте пользовательский объект с колонкой для ServerName, чтобы вы могли идентифицировать его в результатах.
  4. Добавить каждый результат в массив
  5. Также вам не нужно каждый раз создавать новый сеанс, просто используйте -ComputerName Параметр

Итак:

$Array = New-Object System.Collections.ArrayList
$Servers = @("remotemachine1", "remotemachine2", "remotemachine3" )

foreach ($server in $Servers) {

$Results = Invoke-command -ComputerName -ScriptBlock {
    Write-Verbose -Message "Server: $env:ComputerName" -Verbose
    Write-Output (C:\Windows\System32\inetsrv\appcmd.exe list app)
}

$Row = "" | Select Server,Results
$Row.Server = $Server
$Row.Results = $Results
[void]$Array.Add($Row)

}

Наконец, $Array должен держать все это.

0 голосов
/ 05 июля 2018

Вы также можете передать команду invoke в файл

invoke-command -session $pssession -scriptblock { commands on remote machine } | out-file -literalpath "c:\temp\$server-results.txt"

0 голосов
/ 04 июля 2018

Вы можете вернуть содержимое этого файла следующим образом:

$Servers = @("remotemachine1", "remotemachine2", "remotemachine3" )


foreach ($server in $Servers) {

    $PSSession=New-PsSession -ComputerName $server

    $result = Invoke-command -Session $PSSession -ScriptBlock {

        Write-Verbose -Message "Server: $env:ComputerName" -Verbose


        return (C:\Windows\System32\inetsrv\appcmd.exe list app)
    }

    $result > C:\Temp\list.txt
}
Get-PSSession | Remove-PSSession
...