Mit diesem Shortcut Programm kannst du mehrere Programme und auch Webseiten gleichzeitig mit nur einem Klick starten. Im Hintergrund läuft eine Batch-Datei, die alle gewünschten Anwendungen automatisch nacheinander öffnet. Ideal für den schnellen Start deiner täglichen Tools.
🔧 Funktionen
In erster Linie die Funktionen unseres Shortcut Programms erklärt:
📝 Programme/Webseiten auswählen:
Durch das setzen eines Häkchens werden die Programme/Webseiten ausgewählt die gestartet werden sollen.
✔️ „Alles auswählen“
Klick auf diesen Button, um alle Einträge auf einmal zu markieren.
❌ „Auswahl löschen“
Hebt alle Häkchen wieder auf.
🚀 „Programme + Webseiten starten“
Startet alle aktuell ausgewählten Programme oder/und Webseiten.
Die URLs werden im Browser geöffnet.
⚙️Anleitung
Zunächst erstellen wir eine neue PowerShell-Datei mit dem Namen „start.ps1„. Zusätzlich legen wir eine Batch-Datei namens „start_programm.bat“ an, die später als Starter für das PowerShell-Skript dient.
Anschließend öffnen wir die Datei start.ps1 in einem Texteditor, z. B. Notepad oder dem Editor.
In diese Datei tragen wir folgenden Code ein:
Add-Type -AssemblyName System.Windows.Forms; # Aktiviert GUI-Elemente
Durch diesen Code wird die .NET – Bibliothek von Microsoft eingebunden. Hierbei wird die benötigte Bibliothek also Windows Forms von dieser genutzt, um die Erstellung grafischer Benutzeroberflächen, kurz GUI in Powershell zu ermöglichen.
Nun kümmern wir uns um die Erstellung und Formatierung des Fensters:
$form = New-Object System.Windows.Forms.Form # Fenster Erstellung
$form.Text = 'Shortcut' # Bezeichnung Titel des Fensters
$form.Size = New-Object System.Drawing.Size(400, 400) # Größe des Fensters bestimmen
$form.StartPosition = 'CenterScreen' # Position wo das Fenster spawnen soll
$form.BackColor = [System.Drawing.Color]::LightCyan # Hintergrundfarbe bestimmen
Folgendes passiert nun in dem Code:
- Es wird ein Fenster erstellt New-Object
- .Text legt den Fenster Titel fest – in unserem Fall „Shortcut“
- .Size bestimmt die Größe des Fensters – ich habe hierfür jeweils 400px für die Höhe und 400px für die Breite gewählt
- Durch .StartPosition setze ich nun diese Position fest wo das Fenster spawnen soll – in meinem Fall wird das Fenster in der Mitte des Bildschirms spawnen
- .BackColor dient dazu wie der Name schon sagt die „Back“ also die Hintergrundfarbe zu bestimmen – In meinem Fall ist der Hintergrund hellblau
Mit diesem Abschnitt ist das Layout des Fensters vollständig erstellt.
Optional habe ich noch ein kleines Bild hinzugefügt, das die Benutzeroberfläche optisch ergänzt. Es ist auch möglich ein Gif hierbei einzufügen.
Der entsprechende Code fügen wir hierfür unter den bestehenden Code hinzu:
$image = New-Object System.Windows.Forms.PictureBox # Variable wird erstellt
$image.ImageLocation = 'C:\Users\Test\Desktop\StartUp\cat.gif' # Pfad zum Bild/Gif
$image.SizeMode = 'StretchImage' # Bild wird gestreckt
$image.Size = New-Object System.Drawing.Size(60, 70) # Größenangabe
$image.Location = New-Object System.Drawing.Point(10, 30) # Positionierung
$form.Controls.Add($image) # Bild wird eingefügt
- $image ist hierbei für die Erstellung eines PictureBox-Element zum Anzeigen von Bildern zuständig
- In .ImageLocation fügen wir den Pfad zu dem Bild/Gif ein – Vergiss nicht die Apostrophen (‚) vor und nach dem Pfad!
- .SizeMode skaliert hierbei das eingefügt Bild – d.h das Bild/Gif wird in der vorgegeben Größe ausgegeben
- Die Größe des Bildes wird anhand .Size angegeben
- .Location gibt die Position des Bildes an – In meinem fall will ich das mein Gif oben Links haben und passe dementsprechend die Werte an
- Durch .Control.Add($image) wird das angegeben Bild/Gif in das Fenster eingefügt
Einfügen eines Textfeld + die Formatierung
$label = New-Object System.Windows.Forms.Label # Neues Textfeld erstellen
$label.Text = 'Guten Morgen' # Textinhalt
$label.Font = New-Object System.Drawing.Font('Arial', 20, [System.Drawing.FontStyle]::Bold) # Schriftart, -größe, -stil
$label.ForeColor = [System.Drawing.Color]::DarkSlateGray # Schriftfarbe
$label.AutoSize = $true # Größe passt sich dem Text an
$label.Location = New-Object System.Drawing.Point(70, 30) # Position auf dem Formular
$form.Controls.Add($label) # Label dem Formular hinzufügen
- Wie oben schon erwähnt erstellt New-Object etwas – in diesem Falle ein Textfeld
- Der Text der in dem Textfeld stehen soll wird in .Text festgelegt – Im Beispiel „Guten Morgen“
- Es wird nun anhand .Font die Schriftart, die Schriftgröße und weitere Einstellungen festgelegt – Schriftart (Arial), Schriftgröße (20pt) und Stil (bold)
- Ebenso wird durch .ForeColor die Textfarbe festgelegt – Im Beispiel dunkelgrau
- .Autosize Passt die Labelgröße automatisch an den Text an
- .Location gibt wie oben schon erwähnt die Position an – In diesem Fall geht es hierbei nicht um ein Bild oder ein Gif sondern um ein Textfeld – diese befindet sich nun rechts neben dem Bild
- Durch .Control.Add($label) wird das Textfeld in das Fenster eingefügt
Nun kümmern wir uns um die Auswahlliste und die Checkliste:
$checkedListBox = New-Object System.Windows.Forms.CheckedListBox
$checkedListBox.Items.AddRange(@(
"wikiHamsti",
"Google"
))
$checkedListBox.Location = New-Object System.Drawing.Point(10, 100)
$checkedListBox.Size = New-Object System.Drawing.Size(150, 100)
$form.Controls.Add($checkedListBox)
- Gleiches Spiel New-Object erstellt etwas – in diesem Falle eine Liste mit Checkboxen
AddRange(@(...)): Fügt die Einträge hinzu, die später gestartet werden können – Hier benennen wir auch Programme und URLs die wir später anhand des Programm starten wollenLocationundSize: setzen die Position und die Größe auf dem Formular fest
Nun geben wir den Pfad der Programme und die URL der Webseite an:
$programPaths = @{
"wikiHamsti" = "https://wiki.hamsti.pm/"
"Google" = "https://www.google.com/"
}
- $programPaths erstellt ein Dictionary (Hashtable), das die Namen aus der Liste den jeweiligen URLs oder Pfaden zuordnet
- Wichtig: Achte darauf das die Benennungen hierbei exakt sind – d.h. wir haben den Eintrag oben „wikiHamsti“ genannt = wir benenne diesen unter $programPaths ebenso „wikiHamsti“
Lass uns nun den Button erstellen durch den alle Checkboxen einen Hacken bekommen:
$selectAllButton = New-Object System.Windows.Forms.Button
$selectAllButton.Text = 'Alles auswaehlen'
$selectAllButton.Location = New-Object System.Drawing.Point(200, 100)
$selectAllButton.Size = New-Object System.Drawing.Size(150, 30)
$selectAllButton.BackColor = [System.Drawing.Color]::White
$selectAllButton.ForeColor = [System.Drawing.Color]::Black
$selectAllButton.Add_Click({
for ($i = 0; $i -lt $checkedListBox.Items.Count; $i++) {
$checkedListBox.SetItemChecked($i, $true)
}
})
$form.Controls.Add($selectAllButton)
- Erstellt einen Button, der beim Klicken alle Checkboxen aktiviert
- Die Schleife
forgeht durch alle Einträge und setzt sie aufChecked
Gleiches Spiele hier auch der einzige Unterschied ist hierbei nur das die Hacken alle entfernen werden sollen sobald du den Button anklickst:
$selectNoneButton = New-Object System.Windows.Forms.Button
$selectNoneButton.Text = 'Auswahl loeschen'
$selectNoneButton.Location = New-Object System.Drawing.Point(200, 140)
$selectNoneButton.Size = New-Object System.Drawing.Size(150, 30)
$selectNoneButton.BackColor = [System.Drawing.Color]::White
$selectNoneButton.ForeColor = [System.Drawing.Color]::Black
$selectNoneButton.Add_Click({
for ($i = 0; $i -lt $checkedListBox.Items.Count; $i++) {
$checkedListBox.SetItemChecked($i, $false)
}
})
$form.Controls.Add($selectNoneButton)
- Dieser Button entfernt alle Häkchen aus der Liste
- Funktioniert analog zum vorherigen Button, setzt aber
false
Lass uns nun den Button zu Starten des ganzen erstellen:
$okButton = New-Object System.Windows.Forms.Button #Neuer Button wird erstellt
$okButton.Text = 'Start' #Texteingabe
$okButton.Location = New-Object System.Drawing.Point(10, 320) #Position des Buttons
$okButton.Size = New-Object System.Drawing.Size(370, 30) #Größe des Buttons
$okButton.BackColor = [System.Drawing.Color]::White #
$okButton.ForeColor = [System.Drawing.Color]::Black #
$okButton.Add_Click({ #Funktion die durch anklicken des Buttons gestartet wird
foreach ($item in $checkedListBox.CheckedItems) {
$path = $programPaths[$item.ToString()] #
if ($path) {
if ($path -like "http*") {
Start-Process $path
} elseif (Test-Path $path) {
Start-Process $path
} else {
[System.Windows.Forms.MessageBox]::Show("$item nicht gefunden.")
}
}
}
$form.Close()
})
$form.Controls.Add($okButton)
- Startet alle markierten Einträge:
- Abfrage verschiedener Kriterien findet statt
- Wenn es eine URL ist (
http*), öffnet es im Browser - Wenn es ein Datei-/Programmpfad ist, wird geprüft (
Test-Path) und dann gestartet - Bei Fehlern gibt es eine Meldung in einem Popup – „Programmbezeichnung nicht gefunden“
- Wenn es eine URL ist (
- Danach wird das Formular geschlossen
Fenster aktivieren + Starten
$form.Add_Shown({$form.Activate()}) # Fenster wird aktiviert
$form.ShowDialog() # Fenster wird gestartet
Die Überschrift erklärt das was hier passiert xD.
Hinweise:
Die einzelnen Codeabschnitte enthalten erklärende Kommentare hinter jeder Zeile, um das Verständnis zu erleichtern. Im vollständigen Code am Ende wurden diese Kommentare weggelassen, damit du den Code direkt und kompakt übernehmen kannst.
Bitte beachte ebenso: Gebe den Pfad von deinem PC zur Bild bzw. Gif Datei an
🧩 Kompletter Code
Add-Type -AssemblyName System.Windows.Forms;
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Shortcut'
$form.Size = New-Object System.Drawing.Size(400, 400)
$form.StartPosition = 'CenterScreen'
$form.BackColor = [System.Drawing.Color]::LightCyan
$image = New-Object System.Windows.Forms.PictureBox
$image.ImageLocation = 'C:\Users\Test\Desktop\StartUp\cat.gif'
$image.SizeMode = 'StretchImage'
$image.Size = New-Object System.Drawing.Size(60, 70)
$image.Location = New-Object System.Drawing.Point(10, 30)
$form.Controls.Add($image)
$label = New-Object System.Windows.Forms.Label
$label.Text = 'Guten Morgen'
$label.Font = New-Object System.Drawing.Font('Arial', 20, [System.Drawing.FontStyle]::Bold)
$label.ForeColor = [System.Drawing.Color]::DarkSlateGray
$label.AutoSize = $true
$label.Location = New-Object System.Drawing.Point(70, 30)
$form.Controls.Add($label)
$checkedListBox = New-Object System.Windows.Forms.CheckedListBox
$checkedListBox.Items.AddRange(@(
"wikiHamsti",
"Google"
))
$checkedListBox.Location = New-Object System.Drawing.Point(10, 100)
$checkedListBox.Size = New-Object System.Drawing.Size(150, 100)
$form.Controls.Add($checkedListBox)
$programPaths = @{
"wikiHamsti" = "https://wiki.hamsti.pm/"
"Google" = "https://www.google.com/"
}
$selectAllButton = New-Object System.Windows.Forms.Button
$selectAllButton.Text = 'Alles auswaehlen'
$selectAllButton.Location = New-Object System.Drawing.Point(200, 100)
$selectAllButton.Size = New-Object System.Drawing.Size(150, 30)
$selectAllButton.BackColor = [System.Drawing.Color]::White
$selectAllButton.ForeColor = [System.Drawing.Color]::Black
$selectAllButton.Add_Click({
for ($i = 0; $i -lt $checkedListBox.Items.Count; $i++) {
$checkedListBox.SetItemChecked($i, $true)
}
})
$form.Controls.Add($selectAllButton)
$selectNoneButton = New-Object System.Windows.Forms.Button
$selectNoneButton.Text = 'Auswahl loeschen'
$selectNoneButton.Location = New-Object System.Drawing.Point(200, 140)
$selectNoneButton.Size = New-Object System.Drawing.Size(150, 30)
$selectNoneButton.BackColor = [System.Drawing.Color]::White
$selectNoneButton.ForeColor = [System.Drawing.Color]::Black
$selectNoneButton.Add_Click({
for ($i = 0; $i -lt $checkedListBox.Items.Count; $i++) {
$checkedListBox.SetItemChecked($i, $false)
}
})
$form.Controls.Add($selectNoneButton)
$okButton = New-Object System.Windows.Forms.Button
$okButton.Text = 'Start'
$okButton.Location = New-Object System.Drawing.Point(10, 320)
$okButton.Size = New-Object System.Drawing.Size(370, 30)
$okButton.BackColor = [System.Drawing.Color]::White
$okButton.ForeColor = [System.Drawing.Color]::Black
$okButton.Add_Click({
foreach ($item in $checkedListBox.CheckedItems) {
$path = $programPaths[$item.ToString()]
if ($path) {
if ($path -like "http*") {
Start-Process $path
} elseif (Test-Path $path) {
Start-Process $path
} else {
[System.Windows.Forms.MessageBox]::Show("$item nicht gefunden.")
}
}
}
$form.Close()
})
$form.Controls.Add($okButton)
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()
Optional: 🚀 Automatischer Start beim Hochfahren
Drücke die Windows-Taste + R. Dadurch öffnet sich das „Ausführen“-Fenster (Run-Dialog) in Windows.
Gib in dieses Eingabefeld shell:startup ein und bestätige mit Enter.

Es öffnet sich ein Fenster mit der Überschrift „Autostart“.

Ziehe nun die erstellte Batch-Datei in dieses Fenster.
Wichtig: Stelle sicher, dass in der Batch-Datei der korrekte Pfad zur PowerShell-Datei angegeben ist. Ansonsten wird die PowerShell-Datei beim Start nicht ausgeführt.
