在所有远程设备上运行命令,并在使用powershell的本地计算机上获取结果

在所有远程设备上运行命令,并在使用powershell的本地计算机上获取结果,powershell,iis,powershell-4.0,powershell-remoting,Powershell,Iis,Powershell 4.0,Powershell Remoting,我想在所有远程服务器(大约100台服务器)上远程运行一个命令。此命令收集所有iis并保存在txt文件中 (C:\Windows\System32\inetsrv\appcmd.exe list app >C:\Temp\list.txt) 当然,我的问题是如何获取本地机器中所有远程设备的列表。我不想在远程服务器上收集每个列表 $Servers = @("remotemachine1", "remotemachine2", "remotemachine3" ) foreach ($se

我想在所有远程服务器(大约100台服务器)上远程运行一个命令。此命令收集所有iis并保存在txt文件中

(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

您可以按如下方式返回此文件的内容:

$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
  • 创建一个数组来保存结果
  • 使用,
    Write output
    并将其保存到变量中,而不是输出
    C:\Temp\list.txt
  • 提示一下,创建一个自定义对象,其中包含ServerName列,以便在结果中识别它
  • 将每个结果添加到数组中
  • 此外,您不需要每次都创建新会话,只需使用
    -ComputerName
    参数即可
  • 因此:


    最后,
    $Array
    应该可以保存所有内容。

    您还可以将invoke命令通过管道传输到一个文件中


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

    可能在返回后还需要一个“cat”,ty:)
    $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)
    
    }