powershell 运行 并行脚本
powershell run script in parallel
我正在使用 windows 服务器 2003,现在我有一个脚本可以重新启动一项特定的服务,有人可以指导我如何并行 运行 这个脚本吗?我已经使用了 start-job,但在后台似乎只有 运行 但仍然是连续的,下面是我的脚本:
文件名:重启服务.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的任何结果相关信息,谁能帮我改进一下...
这是方向,根据您的具体需要对其进行调整...添加计时器等...
$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 的作业,以获取作业 status/info,使用:
Get-Job | Receive-Job
我正在使用 windows 服务器 2003,现在我有一个脚本可以重新启动一项特定的服务,有人可以指导我如何并行 运行 这个脚本吗?我已经使用了 start-job,但在后台似乎只有 运行 但仍然是连续的,下面是我的脚本:
文件名:重启服务.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的任何结果相关信息,谁能帮我改进一下...
这是方向,根据您的具体需要对其进行调整...添加计时器等...
$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 的作业,以获取作业 status/info,使用:
Get-Job | Receive-Job