1

Windows Server 2003 を使用していますが、特定のサービスを再起動するスクリプトができました。このスクリプトを並行して実行する方法を教えてもらえますか? 私はすでに開始ジョブを使用していますが、バックラウンドでのみ実行されているようですが、まだシーケンシャルです。以下は私のスクリプトです:

ファイル名:restart-service.ps1

$start = Get-Date
$Serverlist = Get-Content -path C:\Computers.txt

ForEach ($Server in $Serverlist){
start-job -scriptblock {param($Server) Restart-Service -InputObject $(Get-Service -ComputerName $Server -Name "aspnet_state")} -ArgumentList $Server
}
Get-Job | Wait-Job
Get-Job | Receive-Job
$end = Get-Date
$timespan = $end - $start
$seconds = $timespan.TotalSeconds
Write-Host "This took me $seconds seconds."

またはこれ

$start = Get-Date
$Server = Get-Content -path C:\Computers.txt

$scriptblock = {
    Param($Server)
    Restart-Service -InputObject $(Get-Service -ComputerName $Server -Name "aspnet_state")
}
$Server | % {Start-Job -Scriptblock $scriptblock -ArgumentList $_ | Out-Null}
Get-Job | Wait-Job | Receive-Job

$end = Get-Date
$timespan = $end - $start
$seconds = $timespan.TotalSeconds
Write-Host "This took me $seconds seconds."

しかし、私は結果しか見ることができませんが、サーバーのIPの結果関連情報を見ることができません.誰かがそれを改善する方法を教えてくれます...

4

1 に答える 1

1

これは方向です。特定のニーズに合わせて微調整します...タイマーなどを追加します...

$Serverlist = Get-Content -path C:\Computers.txt

Foreach ($Server in $Serverlist)
{
    Start-Job -Name "$Server-Job" -ScriptBlock {
    Get-Service -ComputerName $args[0] -Name "aspnet_state" | Restart-Service 
    } -ArgumentList $Server
}

各サーバーの ServerName を使用してジョブを作成し、ジョブのステータス/情報を取得するには、次を使用します。

Get-Job | Receive-Job
于 2016-03-07T13:02:04.883 に答える