internet2107
Goto Top

Suchen eines Dateinamen, Timer

Hallo.

Ich habe folgende Frage. Ich habe eine Liste von PCs, die eingelesen wird und dann in einer Listbox angezeigt wird.
Diese PCs kann man dann nach Wunsch markieren und damit diverse Dinge in Auftrag geben, z.B. das PC A, G, X, Z markiert werden, dann sollen sie rebooten.

In dieser Geschichte sollen PCs auch gepatcht werden. All das funktioniert auch jeweils einwandfrei.
Nur habe ich folgendes Problem.

Wenn das Patchen fertig ist, ändert der jeweilige PC eine Datei, hierbei wird der Name der Datei entsprechend geändert, was den aktuellen Releasestand ausgibt. Soweit so gut.
Es soll aber nun folgend ablaufen. Da ja nicht alle PCs gleich schnell sind mit dem Patchen, ändert z.B. PC A den Dateinamen 4 Minuten schneller, als PC Z.

Mein Wunsch ist nun:
Das Programmm, was das Patchen und andere Dinge steuert, soll nun per Art Timer alle 5 Minuten schauen, ob PC XYZ das Update fertig hat und wenn ja, entsprechend weiter handeln. Sollte der Dateinamen noch nicht geändert sein, also den richtigen Releasestand haben, soll der Timer wieder von vorne beginnen.

Ich verzweifle daran, weil alles andere vorher klappt jeweils super, nur das mit dem Timer und dem "Schau nach, ob... und wenn ja... dann mach..." will nicht so hinhauen.
Denn er macht es aktuell auf einem!!! PC, und zwar dem jeweils ersten markierten, aber dann nicht mehr mit dem Rest face-sad

Ich poste mal Codeausschnitt, damit man es besser verstehen kann:

# Beginne Update
$job_test = $listbox.SelectedItems
foreach ($backupcomputer in $job_test)
{
{ $x += $backupcomputer }
if (Test-Connection -Computername $backupcomputer -BufferSize 16 -Count 2 -Quiet)
{
# hier macht er entsprechende Schritte für ein Update. 
# in diesem Fall führt er eine Datei aus, die auf dem Remote-PC liegt (.ps1-Datei)
}
else
{
Write "Pc $backupcomputer offline. Kein Patch-Update möglich." >>$patchupdate_Maschine_error_set  
$reboot_is_set.Text = "HINWEIS!! - Diese/r PC ist/sind offline: " + $backupcomputer  
}
}

  1. ab hier nun das eigentliche Problem:

# patch fertig, warte auf Abschluss
			$job_test = $listbox.SelectedItems
			foreach ($backupcomputer in $job_test)
			{
				{ $x += $backupcomputer }
				
Write "Setze Timer auf Pc: $backupcomputer" >>$patchupdate_log  
$remotepc = "\\" + $backupcomputer  
$patch_finished = $remotepc + "\c$\support\" + $release_type  

If ((Test-Path $patch_finished) -and ($reboot_is_set.text -eq "Reboot nach Patchen ist gesetzt"))  
{
Write-Host $backupcomputer "ist fertig gepatcht, kann rebootet werden"  
$jobstatus.text = "PC " + $backupcomputer + " fertig gepatcht"  
Write "Patchupdate fertig auf Pc: $backupcomputer" >>$patchupdate_log  
Write "Starte Nacharbeiten Patchupdate auf Pc: $backupcomputer" >>$patchupdate_log  
Start-Sleep -m 15000 # 15 Sekunden
$jobstatus.text = "Restart von: " + $backupcomputer  
Restart-Computer -ComputerName $backupcomputer -Force
Write "Reboot von Pc: $backupcomputer" >>$patchupdate_log  
$jobstatus.text = "PC " + $backupcomputer + " Warte 10 Minuten für Restarbeiten..."  
$richtextbox1.Text = "Warte 10 Minuten für Restarbeiten auf: $backupcomputer"  
Start-Sleep -m 600000 # 10 Minuten
Write-Host $backupcomputer "Rechner komplett fertig"  
Write "Patchupdate fertig auf Pc: $backupcomputer" >>$patchupdate_log  
$richtextbox1.Text = "$backupcomputer komplett fertig gepatcht und rebootet..."  
$checkboxAutomatischerUserlog.Enabled = $true
$groupbox1.Enabled = $true
$checkboxuhrzeit2_1.Enabled = $true
$start_ini.Enabled = $true
$buttonOK.Enabled = $true
$buttonCancel.Enabled = $true
}
elseif ((Test-Path $patch_finished) -and ($reboot_is_set.text -eq "Reboot nach Patchen ist nicht gesetzt"))  
{
Write-Host $backupcomputer "ist fertig gepatcht, kann rebootet werden"  
Write "Patchupdate fertig auf Pc, kann rebootet werden: $backupcomputer" >>$patchupdate_log  
$richtextbox1.Text = "$backupcomputer komplett fertig, kann rebootet werden..."  
}
else
{
#Start-Sleep -Milliseconds 300000
$jobstatus.text = "PC " + $backupcomputer + " noch nicht fertig"  
Write "Patchupdate noch nicht fertig auf Pc: $backupcomputer, Restart Timer" >>$patchupdate_log  

}

Hier kommt nun eine letzte Anweisung, diese darf aber erst dann erfolgen, WENN der Dateiname (Code oben) den richtigen Stand hat.

$job_test = $listbox.SelectedItems
Foreach ($backupcomputer in $job_test)
{
{ $x += $backupcomputer }
# Restarbeiten....
}

Content-Key: 254553

Url: https://administrator.de/contentid/254553

Printed on: April 20, 2024 at 02:04 o'clock