1

我在 powershell 中有一个脚本来访问列表中的每个服务器并检查它是否在线。由于这很耗时,我编写了一个线程逻辑来调用该脚本,我的脚本工作正常。但是我想将我的好/坏服务器分成两个不同的文本文件,我不能在我的脚本中对其进行硬编码,因为显然资源可能被另一个线程使用。如果我在线程逻辑中编写它,我的输出(好的和坏的)将在同一个文件中。我怎样才能很好地格式化只需要的输出?

### Start-MultiThread.ps1 ###
$Servers =Get-Content -Path "C:\Scripts\Servers.txt"

#Start all jobs
ForEach($Server in $Servers){
    Start-Job -FilePath "C:\Scripts\ChkOnline.PS1" -ArgumentList $Server
}

#Wait for all jobs
Get-Job | Wait-Job

#Get all job results
Get-Job | Receive-Job |Out-File -FilePath "C:\Scripts\Output.txt"


##ChkOnline.PS1###

Param($Server = "ServerNameHolder")
$PingStatus= Test-Connection $Server -Quiet

              If ($PingStatus -eq 1)
                        {
                          Return $Server " is online!!"
                        }
            Else
                        {
                          Return $Server " is offline!"
                        }
4

2 回答 2

1

您可以在不启动多个作业的情况下执行此操作。启动多个作业会产生内存和处理时间开销,对于这样的任务,开销大于其价值。

$Servers = Get-Content -Path "C:\Scripts\Servers.txt"
$results = Test-Connection -ComputerName $servers -Count 1 -ErrorAction silentlycontinue;
$AvailableServers = $results|select -expandproperty address
$OfflineServers = Compare-Object -ReferenceObject $Servers -DifferenceObject $AvailableServers -PassThru;
$AvailableServers | out-file c:\scripts\onlineservers.txt;
$OfflineServers | out-file c:\scripts\offlineservers.txt;
于 2013-11-12T19:53:20.160 回答
0

使用 -asjob 参数(多进程)使其非常快。那些启动的将具有非空的 ResponseTime 属性。不幸的是,默认情况下,测试连接将 ResponseTime 属性显示为“时间(毫秒)”。目标名称可以是一个数组。

$servers = 'microsoft.com','yahoo.com'
$a = test-connection $servers -AsJob | Receive-job -Wait -AutoRemoveJob

$a | where responsetime # up

Source        Destination     IPV4Address      IPV6Address  Bytes    Time(ms)
------        -----------     -----------      -----------  -----    --------
DESKTOP-JQ... yahoo.com       98.138.219.231                32       65


$a | where { ! $_.responsetime } # down

Source        Destination     IPV4Address      IPV6Address  Bytes    Time(ms)
------        -----------     -----------      -----------  -----    --------
DESKTOP-JQ... microsoft.com   40.112.72.205                 32
于 2019-12-15T14:42:36.710 回答