AutoClose Windows Manager
Der «AutoClose Windows Manager» ist ein fortgeschrittenes PowerShell-Skript, entwickelt um die Effizienz und Ressourcennutzung in Windows-basierten Arbeitsumgebungen zu optimieren, insbesondere wenn Sie mit Remote-Desktop-Servern arbeiten. Es überwacht kontinuierlich die Aktivität des Mauszeigers und initiiert, bei einer Inaktivität von 10 Minuten, das automatische Schliessen aller offenen Anwendungsfenster. Diese Funktion trägt signifikant zur Einsparung von Systemressourcen bei, indem sie sicherstellt, dass ungenutzte Anwendungen nicht unnötig Systemkapazitäten binden.
Ein wesentlicher Vorteil dieses Skripts liegt in seiner nahtlosen Integration in Unternehmensumgebungen durch die Anbindung an Microsoft Active Directory. Es kann als Gruppenrichtlinienobjekt (GPO) hinterlegt werden, wodurch eine flächendeckende und automatisierte Verteilung auf alle zugehörigen Endgeräte gewährleistet wird. Diese zentralisierte Implementierungsstrategie erleichtert die Verwaltung und Durchsetzung der Ressourcenschonungsrichtlinien erheblich, ohne dass individuelle Konfigurationen auf jedem Gerät erforderlich sind.
Als Erweiterung des Kernskripts besteht die Möglichkeit, detaillierte Analysen zur Softwarenutzung zu integrieren. Diese Funktion ermöglicht es Administratoren, Einblicke in die Anwendungsaktivitäten und -häufigkeiten zu gewinnen, was eine fundierte Basis für die Optimierung von Softwarelizenzen und die weitere Anpassung der IT-Infrastruktur bietet. Diese zusätzlichen Daten können wertvolle Erkenntnisse liefern, um die Effizienz und Effektivität der IT-Ressourcen in einer Organisation weiter zu steigern.
Funktionsweise:
Wie ist der Ablauf des Skripts?
PowerShell Skript:
using System;
using System.Runtime.InteropServices;
public class Mouse {
[DllImport(«user32.dll»)]
public static extern bool GetCursorPos(out POINT lpPoint);
[StructLayout(LayoutKind.Sequential)]
public struct POINT {
public int X;
public int Y;
}
public static POINT GetCursorPosition() {
POINT lpPoint;
GetCursorPos(out lpPoint);
return lpPoint;
}
}
«@
$lastPosition = [Mouse]::GetCursorPosition()
$lastMoveTime = Get-Date
while ($true) {
Start-Sleep -Seconds 10 # Überprüft alle 10 Sekunden die Position
$position = [Mouse]::GetCursorPosition()
if ($position.X -eq $lastPosition.X -and $position.Y -eq $lastPosition.Y) {
# Überprüft, ob 10 Minuten vergangen sind, ohne dass sich die Maus bewegt hat
if (((Get-Date) – $lastMoveTime).TotalMinutes -ge 10) {
# Schließt alle Fenster
Get-Process | Where-Object { $_.MainWindowTitle -ne «» } | Stop-Process
$lastMoveTime = Get-Date # Zeitpunkt der letzten Aktion aktualisieren
}
} else {
$lastPosition = $position # Aktualisiert die letzte bekannte Position
$lastMoveTime = Get-Date # Zeitpunkt der letzten Bewegung aktualisieren
}
}