Fenster per Skript verschieben – wenn PowerShell nicht mehr reicht

Cartoon-Stil Illustration: Ein Programmfenster durchbricht den Monitorrahmen und fällt auf einen Gamer-Schreibtisch

Du kennst das bestimmt: Du startest eine App, aber sie geht stur auf dem falschen Monitor auf. Oder schlimmer – sie landet halb im Off oder merkt sich eine unbrauchbare Fensterposition. Wenn du in solchen Fällen ein Fenster per Skript verschieben willst, stößt PowerShell schnell an Grenzen. Besonders bei Electron-Apps (Reolink, Teams, Discord…) wird das schnell zur Geduldsprobe.

In diesem Beitrag zeige ich dir, wie du Fenster gezielt per Skript verschieben kannst – auch wenn klassische Methoden wie PowerShell und MoveWindow() versagen. Und warum NirCmd dabei dein neuer bester Freund wird.


Warum PowerShell oft nicht reicht

PowerShell hat über user32.dll grundsätzlich Zugriff auf Fensterpositionen und kann diese auch verändern. Das funktioniert super bei klassischen Win32-Anwendungen – aber moderne UIs wie Electron- oder WebView-Apps machen das Spiel nicht mit:

  • MainWindowHandle ist nicht zuverlässig verfügbar
  • Fenster reagieren nicht sauber auf MoveWindow()
  • Maximieren springt oft auf den falschen Monitor

👉 Genau das war bei meinem Test mit der Reolink-App der Fall. Obwohl das Fenster sichtbar war, ließ es sich per PowerShell nicht zuverlässig, per Script, auf einen anderen Monitor verschieben.


Lösung: NirCmd von NirSoft

Illustration: Nutzer verschiebt Fenster per Code auf einem Multi-Monitor-Setup

NirCmd ist ein kleines, portables Tool – keine Installation nötig – das erstaunlich viele Aufgaben im Windows-System erledigen kann. Und das Beste: Es funktioniert auch mit zickigen Fenstern.

Vorteile von NirCmd für Fenstersteuerung:

  • Funktioniert auch bei Electron- und modernen GUI-Anwendungen
  • Verschiebt Fenster exakt per Koordinaten (win move, win setsize)
  • Kann Mausklicks und Tastendrücke simulieren (sendmouse, sendkeypress)
  • Keine Admin-Rechte nötig
  • Ideal kombinierbar mit PowerShell oder Batch-Skripten

Praxisbeispiel: Reolink-App gezielt verschieben und Fullscreen aktivieren

Angenommen, du willst die Reolink-App auf Monitor 2 anzeigen (X=-1366, Y=-255, 1366×768 Auflösung) und per Skript automatisch in den Vollbildmodus bringen – per Klick auf den „Fullscreen“-Button.

🧰 PowerShell + NirCmd Skript

Start-Process "C:\Program Files\Reolink\Reolink.exe"
Start-Sleep -Seconds 5

$nircmd = "C:\Tools\NirCmd\nircmd.exe"

# Reolink-Fenster verschieben
& $nircmd win activate title "Reolink"
Start-Sleep -Milliseconds 300
& $nircmd win setsize title "Reolink" -1366 -255 1366 768

# Maus auf Fullscreen-Button bewegen und klicken
& $nircmd setcursor -44 477
Start-Sleep -Milliseconds 200
& $nircmd sendmouse left click

# Maus zurück parken (optional)
& $nircmd setcursor 10 10

✅ Das funktioniert auch, wenn PowerShell MainWindowHandle nicht greifen kann.


Woher weiß ich die Koordinaten?

Tipp: Nutze diesen kleinen PowerShell-Snack, um deine Mausposition automatisch abzufragen:

Add-Type -AssemblyName System.Windows.Forms
Start-Sleep -Seconds 5
$pos = [System.Windows.Forms.Cursor]::Position
"X: $($pos.X), Y: $($pos.Y)"

Starte das Skript, bring die Maus in Position – z. B. über den Fullscreen-Button – und lies die Werte direkt im Terminal ab.


Weitere Möglichkeiten mit NirCmd

  • Fenster in den Vordergrund holen: win activate
  • Immer im Vordergrund halten: win settopmost
  • Fenster minimieren/maximieren: win max, win min
  • Fenster auf bestimmte Pixel setzen: win move oder win setsize
  • Fenster anklicken: sendmouse

👉 Du kannst sogar die Lautstärke steuern, Monitore ausschalten, Hotkeys simulieren u. v. m.


Nützliches Zubehör

📘 Windows PowerShell: Grundlagen und Scripting-Praxis für den Einstieg* (bezahlter Link)

🎛️ Stream Decks* (bezahlter Link) – perfekt, um Skripte wie dieses auf Knopfdruck zu starten


Weiterlesen

Wenn dich interessiert, wie du mit PowerShell & Aufgabenplaner Fenster nur an Wochentagen automatisch starten und verschieben kannst, schau mal hier rein:
👉 Windows-Autostart nur an Wochentagen mit automatischer Fensterplatzierung (PowerShell + Aufgabenplaner)


Fazit: NirCmd ist klein, kostenlos und unglaublich vielseitig. Wenn PowerShell an seine Grenzen stößt, kommt der kleine Helfer zur Rettung – zuverlässig, nerdy, genial 💡

Wenn du’s selbst ausprobierst oder Fragen hast – schreibe einen Kommentar

Windows-Autostart nur an Wochentagen mit automatischer Fensterplatzierung (PowerShell & Aufgabenplaner)

Symbolbild zum Windows-Autostart nur an Wochentagen mit Aufgabenplanung und PowerShell

Der Windows-Autostart kann schnell ausarten – besonders, wenn Programme unnötig auch am Wochenende mitstarten. In diesem Beitrag zeige ich dir, wie du den Windows-Autostart nur an Wochentagen realisierst, inklusive gezielter Fensterplatzierung auf dem richtigen Monitor. Damit wird dein Setup nicht nur effizienter, sondern auch smarter.

👉 Tipp: Du nutzt bereits PowerShell für dein Smart Home? Dann schau dir auch meinen Beitrag zur automatisierten Gerätesteuerung mit ioBroker und PowerShell an.


✅ Was du hier lernst – Windows-Autostart nur an Wochentagen

  • Wie du Programme nur an bestimmten Tagen und Zeiten automatisch starten lässt
  • Wie du Fenster automatisch auf einem bestimmten Monitor positionierst
  • Wie sich das auch mit Windows-Store-Apps umsetzen lässt
  • Wie du das alles mit einem einzigen PowerShell-Skript steuerst
  • Bonus: Yoast-kompatibel, suchmaschinenfreundlich und clean ✨

📅 Warum der Windows-Autostart nur an Wochentagen sinnvoll ist

Der klassische Autostart in Windows lässt sich nur global aktivieren oder deaktivieren – das heißt: Entweder ein Programm startet immer, oder nie.

Aber was, wenn du willst, dass:

  • deine Arbeitstools nur von Montag bis Freitag automatisch starten?
  • Programme erst ab einer bestimmten Uhrzeit starten sollen?
  • Fenster immer auf Monitor 2 oder 3 erscheinen – z. B. im Hochkant-Layout?

Mit PowerShell + Aufgabenplaner ist das kein Problem.

🔗 Weitere Infos zur Windows Aufgabenplanung bei Microsoft


🛠️ Das PowerShell-Skript für den Windows-Autostart nur an Wochentagen

Dieses Skript:

  • startet beliebige Programme,
  • unterscheidet zwischen klassischen .exe-Dateien und Windows Store-Apps,
  • positioniert Fenster automatisch auf einem bestimmten Bildschirm
  • und führt das Ganze nur an Wochentagen und in einem bestimmten Uhrzeitfenster aus.

Beispiel: Store-App + klassisches EXE-Fenster platzieren

# Importiere das Windows.Forms-Assembly, um Informationen über Bildschirme zu bekommen
Add-Type -AssemblyName System.Windows.Forms

# Aktuelles Datum und Uhrzeit abrufen
$now = Get-Date
$weekday = $now.DayOfWeek
$hour = $now.Hour

# Nur an Wochentagen (Mo–Fr) zwischen 6 und 15 Uhr ausführen
if (
    ($weekday -ne 'Saturday' -and $weekday -ne 'Sunday') -and
    ($hour -ge 6 -and $hour -lt 15)
) {
    # Beispiel 1: Windows-Store-App starten (z. B. Microsoft Teams oder Spotify)
    # Wichtig: Store-Apps benötigen Protokollstart wie "msteams:" oder "spotify:"
    Start-Process "msteams:"

    # Beispiel 2: Klassische .exe-Anwendung starten (hier mit Beispielpfad)
    $appPath = "C:\Programme\MeineApp\MeinTool.exe"
    $appProc = Start-Process $appPath -PassThru

    # Kurze Pause, damit das Fenster der App vollständig geladen ist
    Start-Sleep -Seconds 5

    # API-Funktion einbinden, um Fenster verschieben zu können
    Add-Type @"
using System;
using System.Runtime.InteropServices;
public class WinAPI {
    [DllImport("user32.dll")]
    public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
}
"@

    # Bildschirminformationen abrufen – z. B. für Multimonitor-Setups
    $screens = [System.Windows.Forms.Screen]::AllScreens

    # Ziel: Monitor 3 (Index 2), falls vorhanden – sonst letzter Monitor als Fallback
    if ($screens.Count -ge 3) {
        $screen = $screens[2]
    } else {
        $screen = $screens[$screens.Count - 1]
    }

    # Position und Größe für untere Bildschirmhälfte berechnen
    $x = $screen.WorkingArea.X
    $width = $screen.WorkingArea.Width
    $halfHeight = [int]($screen.WorkingArea.Height / 2)
    $yBottom = $screen.WorkingArea.Y + $halfHeight

    # Fensterhandle suchen: bis zu 20 Versuche mit je 0,5 Sekunden Pause
    # Hintergrund: Manche Fenster erscheinen zeitverzögert oder starten unsichtbar
    $handle = $null
    for ($i = 0; $i -lt 20; $i++) {
        # Prüfen, ob ein Prozess mit passendem Fenstertitel existiert
        $proc = Get-Process | Where-Object { $_.MainWindowTitle -like "*MeinTool*" }

        if ($proc) {
            # Wenn ein gültiges Fensterhandle vorhanden ist, abbrechen
            $handle = $proc.MainWindowHandle
            if ($handle -ne 0) { break }
        }

        # Kurze Wartezeit, bevor erneut geprüft wird
        Start-Sleep -Milliseconds 500
    }

    # Wenn ein gültiges Fensterhandle gefunden wurde: Fenster verschieben
    if ($handle -ne 0) {
        [WinAPI]::MoveWindow([intptr]$handle, $x, $yBottom, $width, $halfHeight, $true)
    }
}

🔄 Programme zeitgesteuert mit Aufgabenplaner starten

  1. Öffne den Aufgabenplaner (taskschd.msc)
  2. Klicke auf „Aufgabe erstellen“
  3. Reiter „Allgemein“:
    • Name: Zeitgesteuerter Programmstart
    • Haken bei „Mit höchsten Privilegien ausführen“
  4. Reiter „Trigger“:
    • Neuer Trigger: „Bei Anmeldung“
    • Optional: Haken bei „Verzögern um: 30 Sekunden“
  5. Reiter „Aktionen“:
    • Programm: powershell.exe
    • Argumente: -ExecutionPolicy Bypass -File "C:\Scripts\mein_autostart_script.ps1"
  6. Speichern – fertig!

🔗 Weitere Details zur PowerShell Get-Date Funktion bei Microsoft


🧠 Pro-Tipps für deinen Autostart unter Windows

Wenn du mehrere Tools auf mehreren Monitoren „in Position bringen“ willst, kannst du das Skript einfach erweitern. Mehrere Fenster gleichzeitig zu verschieben ist kein Problem – solange du die Fenstertitel kennst, klappt das wunderbar.

🔗 Schau dir z. B. AutoHotkey oder nircmd von NirSoft an, wenn du noch mehr Kontrolle brauchst.

📚 Oder stöbere durch passende PowerShell-Beispiele auf GitHub


📋 Fazit – Windows-Autostart nur an Wochentagen automatisieren

Mit PowerShell und dem Aufgabenplaner kannst du dir ein richtig smartes Autostart-System bauen – das nicht nur nach Uhrzeit und Wochentagen reagiert, sondern auch deine Fenster genau da platziert, wo du sie brauchst.

Kein manuelles Schieben mehr. Kein Autostart-Wildwuchs. Einfach nur: sauber, gezielt, nerdig gut.

prokrastinerd approved!

🔧 Nerd-Tools für dein Windows-Autostart-Setup

Wenn du dein System weiter optimieren willst, sind hier ein paar nützliche Tools, die perfekt zu diesem Beitrag passen – für mehr Effizienz, Kontrolle und nerdige Freude.

  • Windows PowerShell: Grundlagen & Scripting-Praxis für Einsteiger* (bezahlter Link)
    Ein sehr gut bewertetes deutsches Buch, das PowerShell praxisnah erklärt. Ideal, wenn du tiefer einsteigen willst.
  • Elgato Stream Deck (MK.2)* (bezahlter Link)
    Das kennt inzwischen fast jeder: das Stream Deck von Elgato. Ursprünglich für Streamer gedacht, hat es längst seinen Weg in produktive Setups gefunden. Mit frei belegbaren Tasten kannst du PowerShell-Skripte, App-Starts oder Fensteranordnungen mit einem einzigen Knopfdruck auslösen – perfekt für alle, die ihren Workflow lieben (und gern ein bisschen automatisieren).
  • BONTEC Monitor Halterung 2 Monitore für 13-27 Zoll* (bezahlter Link)
    Flexibel verstellbarer Monitorarm – ideal, wenn du wie im Beitrag mit Hochkant-Monitoren arbeitest und Ordnung auf dem Schreibtisch willst.

Licht automatisch einschalten beim PC-Start – So geht’s mit ioBroker und Home Assistant

Technisch aufgeräumter Schreibtisch mit PowerShell-Code auf dem Bildschirm und eingeschalteter Schreibtischlampe – Symbolbild für Lichtautomatisierung beim PC-Start.

Licht automatisch einschalten beim PC-Start – genau das ist das Ziel dieses Beitrags. Wenn dein PC hochfährt, soll automatisch das Licht am Schreibtisch angehen? Klingt erstmal wie Magie – ist aber mit PowerShell, ioBroker oder Home Assistant in wenigen Minuten realisierbar. In diesem Beitrag zeige ich dir Schritt für Schritt, wie du genau das umsetzt. Alles lokal, ohne Cloud, dafür mit extra Nerd-Faktor und ein paar praktischen PowerShell-Tricks.


Was du brauchst, um beim PC-Start das Licht automatisch einzuschalten

  • Einen Windows-PC mit PowerShell (ab Windows 10)
  • Eine smarte Lampe oder Steckdose (z. B. Tapo Nano Smart WLAN Steckdose* (bezahlter Link) oder Philips Hue* (bezahlter Link))
  • Eine laufende ioBroker- oder Home Assistant-Installation
  • Einen gemeinsamen Netzwerkzugang
Aufgeräumter Technik-Arbeitsplatz mit drei Monitoren, PowerShell-Code und Smart-Home-Zubehör – der PC wird gestartet und das Licht geht automatisch an.
Beim Start des PCs aktiviert ein PowerShell-Skript automatisch das Licht – so einfach kann Smart Home mit ioBroker oder Home Assistant sein.

Variante 1: Beim PC-Start das Licht automatisch einschalten mit ioBroker

ioBroker vorbereiten

  1. Stelle sicher, dass der web-Adapter in ioBroker läuft.
  2. Aktiviere die Simple-API (Standardport ist meist 8087).
  3. Lege einen Datenpunkt für dein Licht an, z. B. licht.schreibtisch.on (Typ: Boolean).

PowerShell-Skript auf dem Windows-PC

Erstelle z. B. in C:\Scripts\light-on.ps1 folgendes Skript – kommentiert, damit du weißt, was was macht:

# URL zur ioBroker-Simple-API, um das Licht einzuschalten
$ioBrokerUrl = "http://192.168.0.100:8087/set/licht.schreibtisch.on?value=true"

try {
    # HTTP-Request an ioBroker senden
    Invoke-WebRequest -Uri $ioBrokerUrl -UseBasicParsing
    Write-Output "Lichtsignal an ioBroker gesendet."
} catch {
    # Falls etwas schiefgeht, gib den Fehler aus
    Write-Error "Fehler beim Senden des Signals: $_"
}

Hinweis: Wenn du Authentifizierung in ioBroker aktiviert hast, brauchst du einen Auth-Header (Basic Auth oder Token).

Autostart einrichten (mit ExecutionPolicy!)

Windows blockiert standardmäßig das Ausführen von PowerShell-Skripten – außer du erlaubst es explizit. Dazu nutzt du ExecutionPolicy Bypass, und zwar so:

So geht’s mit Verknüpfung im Autostart-Ordner:

  1. Erstelle eine Verknüpfung zu powershell.exe.
  2. Gib bei Ziel folgendes ein:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\light-on.ps1"

  1. Schieb die Verknüpfung in den Autostart-Ordner:

Pfad: C:\Users\<DEINNAME>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Oder über die Aufgabenplanung:

  • Öffne „Aufgabenplanung“ (taskschd.msc)
  • Neue Aufgabe → Trigger: „Beim Start“ oder „Bei Anmeldung“
  • Aktion: powershell.exe
  • Argumente: -ExecutionPolicy Bypass -File "C:\Scripts\light-on.ps1"

So umgehst du elegant die Blockade, ohne dein System unsicher zu machen.


Variante 2: Home Assistant – Licht automatisch einschalten beim PC-Start per REST API

Vorbereitung

  1. Erstelle ein Long-Lived Access Token in deinem Home Assistant-Profil.
  2. Finde die entity_id deiner Lampe (z. B. light.schreibtisch).

PowerShell-Skript

# Dein Home Assistant Token – sicher aufbewahren!
$token = "DEIN_LONG_TOKEN"

# URL zum REST-API-Endpunkt zum Einschalten von Licht
$uri = "http://192.168.0.101:8123/api/services/light/turn_on"

# Header mit Authentifizierung
$headers = @{ Authorization = "Bearer $token" }

# JSON-Daten: Welche Lampe soll eingeschaltet werden?
$body = @{ entity_id = "light.schreibtisch" } | ConvertTo-Json

# Anfrage senden
Invoke-RestMethod -Uri $uri -Headers $headers -Method Post -Body $body -ContentType 'application/json'

Auch dieses Skript kannst du wie oben beschrieben beim Systemstart ausführen lassen.


Bonus: Weitere Ideen zum Licht beim PC-Start

  • Sanftes Aufdimmen: In ioBroker per Script oder in HA per transition-Attribut
  • Präsenz-Erkennung: Kombiniere das mit Bewegungssensor oder Smartphone-Präsenz
  • Mehrere PCs: Unterschiedliche Trigger-Datenpunkte für unterschiedliche Nutzer

Fehlerquellen und Tipps für die Licht-Automatisierung

  • Firewall: Stelle sicher, dass dein ioBroker vom PC aus erreichbar ist
  • ExecutionPolicy: Immer mit -ExecutionPolicy Bypass starten, wenn du Skripte automatisierst
  • Netzwerk: Beide Geräte müssen sich im gleichen Netz befinden (keine VLANs o. ä. dazwischen)
  • API-Schutz: Wenn du von außen zugreifst, nutze Tokens und sichere Ports

Fazit: Licht automatisch einschalten beim PC-Start lohnt sich

„Licht automatisch einschalten beim PC-Start“ ist keine Hexerei, sondern mit ein paar Zeilen PowerShell und etwas Smart-Home-Magie schnell gemacht. Egal ob du ioBroker oder Home Assistant nutzt – dein PC wird zum echten Smart-Home-Mitbewohner.

Genau solche Automatismen machen ein echtes Smart Home aus: Du musst nichts mehr selbst schalten oder daran denken – dein System erledigt es einfach für dich. Wenn dich das Thema interessiert, schau unbedingt in meinen Beitrag Echtes Smart Home: Automatisierung statt Fernbedienung.