PowerShell Commands in VBA

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

PowerShell Commands in VBA

#1

Beitrag von thowe »

Hallöchen,

es ist kein Geheimnis das ich mich gerne von D. Pienault inspireieren lasse.
Unter anderem auch zum Theme Execute Befehle in Power Shell via VBA

siehe hier: https://www.devhut.net/page/2/?s=PowerShell

Ich muss jetzt zugegeben, dass ich noch nie mit Power Shell gearbeitet habe.
In letzter Zeit jedoch einiges in Linux (im Terminal) "mache"....

Ich habe unter anderem auf einem Gerät Windows 11 und das systemeigene WSL2 (Ubuntu 22.04 (nur Server-Edition)) laufen. Da lass ich alle Entwicklungen laufen (teilweise mit ddev & docker, nur docker, teileweise pure/root).

Ubuntu, apache/nginx, MariaDB, Tomcat und blubb/foo... laufen -> definitiv!
(Hab einige Instanzen an Laravel, TYPO3 etc drauf laufen)

Jetzt wollte ich (für Testzecke) via VBA das Linus Subsystem starten. In Powershell kein Problem, mit:

wsl -> startet LInux
wsl ~ -> verfrachtet einen gleich ins Home Verzeichnis

Ich habe das folgende probiert:

Code: Alles auswählen

Public Sub POWERSHELL_Execute(ByVal strPowerShellCommand As String)
    
    'Setup the powershell command properly
    strPowerShellCommand = "powershell -command " & strPowerShellCommand 
    
    
    'Execute and capture the returned value
    CreateObject("WScript.Shell").Exec (strPowerShellCommand)
End Sub
Aufzurufen ist dies mit:

Code: Alles auswählen

POWERSHELL_Execute "wsl"
Es tut sich was..., denn es flackert/ruckerlt am Bildschirm....
Mit dem "klickibunti" TaskManager in Windows kann ich nichts anfangen, mir fällt auf, das nur ein "Thread" startet, wenn ich manuell mit wsl mein Linuxsubsystem starte feuert Windows einige Intanzen an wsl-Threads (wenn das so heißt, das "Trheads dingsbums). Pipes pids und so finde ich in diesem GUI verfrickelten TASK Manager nicht...

Jemand ne Idee, bereit etwas zu helfen....?

meine spitzen Vulkanier Ohren glühen schon violet....

LG
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: PowerShell Commands in VBA

#2

Beitrag von d'r Bastler »

Moin thowe,

Deine Ohren passen gut zum meinem gerade frisch gerührten Blaubeer-Eis :lol:

Mein Vorschlag zu Deiner Frage: Such mal hier nach VBA + Powershell. Da gibt es bereits mehrere Themen. Oder - erwäge als Alternative einfache CommandLine-Befehle, die lassen sich in VBA relativ einfach handhaben.

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: PowerShell Commands in VBA

#3

Beitrag von thowe »

@heb

Danke für die den Link in #2.

Kurz & bündig kann man wsl2 (Windows Subsystem Linux) wie folgt starten

Code: Alles auswählen


Sub POWERSHELL_RunWsl2()

    CreateObject("Wscript.Shell").Run "wsl"

End Sub

Jetzt werde ich mal 'vbasteln und rundherum bauen.
- Wurde schon wsl2 gestartet
- öffne auf localhost eine bestimmte site
- zB für Datenbankmanagment phpmyadmin oder adminer
- Wenn geöffnet schließe/beende wsl2

lg thowe
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

PowerShell Commands in VBA - Batch Datei

#4

Beitrag von thowe »

Hallöchen

das geht - doch hurtig!

hier wie man eine Batchdatei ausführen kann, via VBA:

Code: Alles auswählen


Sub POWERSHELL_RunBatchExe()
	
	'True ensures that command wait due the started process before stopped
	CreateObject("Wscript.Shell").Run "die-batch.cmd",0,True  

Sub End

lt thowe
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: PowerShell Commands in VBA

#5

Beitrag von thowe »

Moin,

@edit: hier wird auf .Exec und nicht auf .Run wie in #3 verwiesen.
-> ich gebe zu, ich habe noch nicht ganz den Unterschied bei Power Shell zwischen .Exec und .Run verstanden
-> .... da Power Shell für mich gänzlich neu ist, jedoch Zukunft in Excel neben JS (siehe Fußnote)

-------------------------------------------------------------------------------------------------------------------------

da dies eine Bastelstube ist nun als Anregung,wie man sich ein/en Return Value von Power Shell ins Excel holt:

Zuerst in ein Modul diese Prozedur!

Code: Alles auswählen

Public Function POWERSHELL_RunCommand(strCommandInput As String) As String

    'thx a lot to: Brian Burns @stackoverflow
    
    'Run a shell command, returning the output as a string

    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    Dim objExecuteCommand As Object
    Dim objReturnValue As Object
    Dim strValues As String
    Dim strLines As String

    'run command
    
    Set objExecuteCommand = objShell.Exec(strCommandInput)
    Set objReturnValue = objExecuteCommand.StdOut

    'handle the results as they are written to and read from the StdOut object
    
    While Not objReturnValue.AtEndOfStream
        strLines = objReturnValue.ReadLine
        If strLines <> "" Then strValues = strValues & strLines & vbCrLf
    Wend

    POWERSHELL_RunCommand = strValues

End Function
Aufrufen, verwenden kann man beipsielsweise quick & dirty, so:
wenn man beispielsweise die - interne - Server-localhost - IP Adresse (nicht die die man in Windows unter hosts eintragen kann, oder default eingestellt ist mit: 127.0.0.1) erhalten will:

Code: Alles auswählen

Public Sub DisplayIPOfLocalhost()

    MsgBox POWERSHELL_RunCommand("wsl hostname -I")

End Sub
WICHTIG!
Es muss vorher das Linux Subsystem in Windows (wsl2) laufen. Siehe #2
Wie man das überprüft finde ich noch raus.

Jetz kann mit dem zurückggebenen Wert jeder damit machen was er möchte, zB in eine Zelle schreiben, für das bootstrape oder das Initialize in seiner Excel App.....

Was mir auffällt:
dieser Code ist etwas behäbig, jemand Ideen wie man das beschleunigen kann, liegt es "While Not ...Wend"?

lg thowe
[b]NS:[/b] warum ich mich damit spiele....?
Mit 2027 verschwindet WS VisualScript bei Microsoft
-> Alternativen: JS oder PowerShell
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: PowerShell Commands in VBA

#6

Beitrag von d'r Bastler »

Moin thowe,

um ehrlich zu sein ... von Linux habe ich soviel Ahnung, wie von grauhaarigen Pinguinen, bzw. deren Geschmackspräferenzen ...

Aber, um zu prüfen, was läuft, also auch Dein Linux, hilft vielleicht dieser Post

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

PowerShell Fragen über Fragen!!!?!!!

#7

Beitrag von thowe »

Hallöchen!

ich habe jetz rausgefunden, das ich in der Power Shell, mit

Code: Alles auswählen

wsl -list --running
herausfinde, ob wsl2 (das habe ich installiert) , oder - vielleicht - noch wsl1 installiert ist, schaffe ich...

mit obigen Befehl bekomme ich zurück:
Es werden keine Distributionen ausgeführt.
zumindest in Windows 11 und laut Tuts auch in Windows 11...

Wie kännte man das alles - programmatisch - abfangen/managen...?

lg
Zuletzt geändert von thowe am 31. Jul 2024, 17:28, insgesamt 1-mal geändert.
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: PowerShell Commands in VBA

#8

Beitrag von thowe »

Lieber heb

zu #6

damit wirst du dich auseinandersetzten müssen

-> es sein denn, dein zukünftiges Leben ist nur mehr von Blaubeeren und Kernöl determiniert... :lol: :lol: :lol: :lol:

lg thowe

NS: klopf dir endlich wls(2) rauf... -> du wirst staunen, deine grauen Haare werden vulkanig violett....
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: PowerShell Commands in VBA

#9

Beitrag von d'r Bastler »

Noch mal Moin,

zur Beschleunigung von Schleifen hilft immer die Daten zuvor in Array, Collection oder Dictionary zu schreiben. Damit sind sie unformatiert im RAM und schnell verwertbar.

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: PowerShell Commands in VBA

#10

Beitrag von d'r Bastler »

zu #6 ... das habe ich seit rund zehn Jahren hinter mir ... Ich bleibe bei meinen Leisten

Heute Abend gibt es Tagliatelle Parmigiano ...
Wenn Du Interesse hast, schicke ich Dir gerne mal mein persönliches Kochbuch, aktuell mit rund 250 Leckereien :lol:
lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste