Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Powershell aus VBA aufrufen

Powershell aus VBA aufrufen
03.09.2013 11:06:47
Z1mtstern
Hallo liebe Community,
ich versuche ein Powershell-Skript aus VBA aufzurufen, das im gleichen Ordner liegt wie die Excelmappe.
Alle meine Ansätze haben nicht geklappt, da der Call Shell-Befehl nicht kapiert, dass Pfad eine Variable ist...
Dim pathname As String
pathname = ActiveWorkbook.Path
Call Shell("powershell -noexit -file pathname &""/Namen.ps1""", 1)

Dim pathname As String
pathname = ActiveWorkbook.Path
Call Shell("powershell -noexit -file ""pathname/Namen.ps1""", 1)
Ich hoffe jemand von euch kann mir helfen!
Viele Dank im voraus!
Gruß
Lukas

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Powershell aus VBA aufrufen
03.09.2013 11:39:04
Rudi
Hallo,
evtl so?
Call Shell("powershell -noexit -file " &pathname &"/Namen.ps1, 1")
Gruß
Rudi

AW: Powershell aus VBA aufrufen
03.09.2013 11:52:52
Z1mtstern
Hallo Rudi,
viele Dank für deine Antwort!
Hast du den Befehl bei dir getestet? Bei mir funktioniert der Powershell-Aufruf damit nicht.
Powershell erscheint für weniger als eine Sekunde in der Programmleiste und schließt sich anschließend wieder. Ein nochmaliger Test mit dem gesamten Pfad (ohne Variable) zeigt, dass das Powershell-Skript geht.
Vielleicht weißt du ja noch einen anderen Trick ;)
Gruß
Lukas

Anzeige
AW: Powershell aus VBA aufrufen
03.09.2013 11:59:23
Rudi
Hallo,
Powershell kenn ich nicht.
Ein nochmaliger Test mit dem gesamten Pfad (ohne Variable) zeigt, dass das Powershell-Skript geht.

Wie sieht der Aufruf denn aus?
Gruß
Rudi

AW: Powershell aus VBA aufrufen
03.09.2013 12:57:20
Z1mtstern
Hallo Rudi,
Powershell ist im Prinzip eine bessere CMD-Eingabeaufforderung.
Ob der Aufruf klappt kann man ganz leicht testen, indem man:
- Ein Textdokument erzeugt
- Die Dateiendung in .ps1 ändert
- lediglich "read-host" in die Datei reinschreibt (= warten, bis Enter gedrückt wird)
Der fuktionierende Aufruf ohne Variable sieht so aus:
Call Shell("powershell -noexit -file ""C:\Users\Lukas\Documents\Namen.ps1", 1)

Anzeige
AW: Powershell aus VBA aufrufen
03.09.2013 13:20:29
Rudi
Hallo,
kann ich nicht testen. Scripts sind deaktiviert.
Call Shell("powershell -noexit -file """ & PfadName & "\test.ps1", 1)
Gruß
Rudi

AW: Powershell aus VBA aufrufen
03.09.2013 13:25:23
Z1mtstern
Da bin ich aber platt, sagte die Flunder!
Deine Version funktioniert tadellos - Tausend Dank für deine investierte Zeit!
Gruß
Lukas
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Powershell aus VBA aufrufen


Schritt-für-Schritt-Anleitung

Um ein Powershell-Skript aus VBA aufzurufen, kannst du die Shell-Funktion verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deine Datei)", wähle "Einfügen" und dann "Modul".

  3. Gib folgenden Code ein:

    Dim pathname As String
    pathname = ActiveWorkbook.Path
    Call Shell("powershell -noexit -file """ & pathname & "\Namen.ps1""", vbNormalFocus)
  4. Speichere das Modul und schließe den VBA-Editor.

  5. Führe das Makro aus, um das Powershell-Skript zu starten.

Achte darauf, dass du die Datei mit der Endung .ps1 im gleichen Verzeichnis wie die Excel-Datei abgelegt hast.


Häufige Fehler und Lösungen

  • Powershell schließt sofort: Wenn das Powershell-Fenster nach dem Aufruf sofort schließt, könnte das daran liegen, dass keine Ausgabe oder kein Fehler angezeigt wird. Verwende den Parameter -noexit, um das Fenster offen zu halten.

  • Pfad-Variable wird nicht erkannt: Stelle sicher, dass du den Pfad korrekt anfügst, indem du die Variable in Anführungszeichen setzt, wie im obigen Beispiel.


Alternative Methoden

Es gibt verschiedene Möglichkeiten, ein Powershell-Skript aus VBA aufzurufen:

  • Verwendung von CreateObject: Du kannst auch die CreateObject-Methode nutzen, um Powershell zu starten:

    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run "powershell -noexit -file """ & pathname & "\Namen.ps1""", 1, False
  • Direktes Ausführen von Powershell-Befehlen: Du kannst auch direkt Powershell-Befehle ausführen, z.B.:

    Call Shell("powershell -command ""Get-Process""", vbNormalFocus)

Praktische Beispiele

Hier sind einige nützliche Beispiele, wie du Powershell-Skripte aus Excel VBA aufrufen kannst:

  1. Ein Skript mit Parametern ausführen:

    Dim param As String
    param = "C:\Users\Lukas\Documents\Namen.ps1 -param1 Wert1 -param2 Wert2"
    Call Shell("powershell -noexit -file """ & param & """", vbNormalFocus)
  2. Ein anderes Skript aufrufen:

    Call Shell("powershell -noexit -file ""C:\Path\to\another_script.ps1""", vbNormalFocus)

Tipps für Profis

  • Fehlerprotokollierung: Füge in dein Powershell-Skript eine Fehlerprotokollierung hinzu, um Probleme leichter zu identifizieren.

  • Debugging: Verwende Write-Host oder Start-Sleep in deinem Skript, um das Verhalten zu testen und sicherzustellen, dass es korrekt funktioniert.

  • Sicherheitsrichtlinien: Achte darauf, dass die Ausführung von Skripten in deiner Umgebung erlaubt ist. Du kannst dies mit dem Befehl Set-ExecutionPolicy in Powershell ändern.


FAQ: Häufige Fragen

1. Wie kann ich ein Powershell-Skript aus Excel VBA ausführen, ohne dass das Fenster schließt? Verwende den Parameter -noexit, um das Powershell-Fenster offen zu halten.

2. Was mache ich, wenn meine Powershell-Skripte nicht ausgeführt werden? Stelle sicher, dass die Ausführung von Skripten in den Powershell-Einstellungen erlaubt ist. Du kannst dies mit dem Befehl Set-ExecutionPolicy RemoteSigned überprüfen.

3. Wie kann ich Variablen in Powershell aus VBA übergeben? Du kannst Parameter in deinem Skript definieren und sie beim Aufruf des Skripts übergeben. Beispiel: -param1 Wert1 -param2 Wert2.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige