Get-Job
ve Wait-Job
ile PowwerShell'de çok iş parçacığı hakkında çok fazla okuma yaptım ancak yine de işe yaramıyor gibi görünüyor.PowerShell ile çok iş parçacıklı
Sonuç olarak, bunu çalıştırmak için GUI tabanlı bir komut dosyası olarak çalışacağım ve GUI'imin donmasını istemiyorum.
Komut, Etki Alanı Denetleyicilerinin Olay Günlüklerini arıyor ve daha sonra istediğim ayrıntıları alıp vermekteyim, ihtiyacım olan gibi çalışıyor.
Invoke-Command {#script goes here} -ComputerName ($_) -AsJob -JobName $_
kullanarak bir işe başlayabilirim ve işler çalışır. Aşağıda
Senaryo: Ben While
döngü var Şu
Clear-Host
Get-Job | Remove-Job
(Get-ADDomainController -Filter *).Name | ForEach-Object {
Invoke-Command -ScriptBlock {
$StartTime = (Get-Date).AddDays(-4)
Try{
Get-WinEvent -FilterHashtable @{logname='Security'; id=4740;StartTime=$StartTime} -ErrorAction Stop `
| Select-Object * | ForEach-Object {
$Username = $_.Properties[0].Value
$lockedFrom = $_.Properties[1].Value
$DC = $_.Properties[4].Value
$Time = $_.TimeCreated
Write-Host "---------------------------------------------"
Write-Host $Username
Write-Host $lockedFrom
Write-Host $DC
Write-Host $Time
Write-Host "---------------------------------------------"
}#ForEach-Object
}catch [Exception] {
If ($_.Exception -match "No events were found that match the specified selection criteria") {
Write-Host "No events for locked out accounts." -BackgroundColor Red
}#If
}#Try Catch
} -ComputerName ($_) -AsJob -JobName $_ | Out-Null # Invoke-Command
}#ForEach-Object
onun bana sonucunu göstermek için daha sonra bekleyen söyle: my GUI
(Get-ADDomainController -Filter *).Name | ForEach-Object {
Write-Host "Waiting for: $_."
While ($(Get-Job -Name $_).State -ne 'Completed') {
#no doing anything here
}#While
Receive-Job -Name $_ -Keep
}#ForEach-Object
#clean up the jobs
Get-Job | Remove-Job
Düşünme (oluşturulacak), ben Her Etki Alanı Denetleyicisi için bir sütuna sahip olacak ve her bir başlığın altında sonuçlar gösterecek, GUI'mi dondurmayacak ve sonuçları geldiğinde nasıl gösterecek?
Birkaç kez sorulduğunu biliyorum, ancak örnek veremiyorum.
Hey teşekkürler, ben 'scriptblock' betik kopyalamıyorum ama hiçbir şey oluyor? Veriler nerede gösteriliyor? –
'Write-Host' yerine 'Write-Host' yazmayı deneyin – xXhRQ8sD2L7Z
Tamam, sonuçların çıktılarını almak için onu alabilirim, sadece bir gui'ye eklemek için çalışmam gerekiyor, teşekkürler yakında ekleyeceğim ve yapıştırın benim sonuçlarım :) –