grmg2010
Goto Top

Get-VMSwitch Ausgabe in PowerShell-Skript

Moin,

ich möchte mit dem Befehl "Get-VMSwitch" die vorhandenen virtuellen Switche auf einem Hyper-V Host innerhalb eines Skripts anzeigen. Leider funktioniert dies nicht,
ic h kann zwar sehen, dass der Befehl ausgeführt wird aber die Ausgabe erscheint nicht im PowerShell-Fenster. Führe ich das direkt in der PowerShell aus, erhalte ich eine wie gewünscht die Ausgabe. Ich hatte im weiteren versucht das Ergebnis in einer variable zwischenzuspeichern und dann auszugeben. Leider ist die Formatierung nicht sinnvoll.

$SwitchName = Get-VMSwitch -Computername $env:COMPUTERNAME
Write-Host $SwitchName

Welche Möglichkeiten habe ich, die Ausgabe des Befehls im Skript vernünftig darzustellen?

Gruß

Content-ID: 1293200496

Url: https://administrator.de/contentid/1293200496

Printed on: November 13, 2024 at 21:11 o'clock

erikro
erikro Sep 22, 2021 at 18:37:35 (UTC)
Goto Top
Moin,

ich habe gerade kein Hyper-V-Host zur Verfügung und deshalb auch kein get-VMSwitch. Aber wenn Dir die normale Ausgabe des Befehls reicht, dann versuche es mal mit tee-object. Hier ein Beispiel mit get-childitem. Aber das geht mit jedem anderen Befehl auch:

Get-ChildItem | Tee-Object -variable variable_without_dollar
foreach($file in $variable_without_dollar) {

    write-output $file.fullname

}

Und so sieht dann die Ausgabe aus:

PS C:\Users\erik\Documents\ps-test> .\tee.ps1


    Verzeichnis: C:\Users\erik\Documents\ps-test


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        01.06.2020     20:31                April
d-----        01.06.2020     20:31                xml
-a----        23.04.2020     18:13            455 move.ps1
-a----        22.09.2021     20:30            149 tee.ps1
C:\Users\erik\Documents\ps-test\April
C:\Users\erik\Documents\ps-test\xml
C:\Users\erik\Documents\ps-test\move.ps1
C:\Users\erik\Documents\ps-test\tee.ps1

Wichtig ist, wenn Du die Ausgabe in einer Variablen speichern willst, dass Du den Namen ohne $ davor hinter -variable schreibst. Im weiteren Skript dann wieder mit $.

hth

Erik
Cloudrakete
Cloudrakete Sep 22, 2021 at 19:58:14 (UTC)
Goto Top
Abend,

ich hab das "Skript" mal auf einem unserer Hyper-Vs ausprobiert und da kommt doch genau das zurück, was man braucht?
Die Auflistung ist sogar automatisch in einem Table geordnet, daher verstehe ich deine Frage ehrlich gesagt nicht.
Du sagst, wenn du es in PowerShell ausführst, dann bekommst du das was du wünschst ausgegeben ... Dann stellt sich mir die Frage: wo führst du es sonst aus, wenn nicht in der Powershell?


Hilfreich wäre vielleicht, wenn du mal beispielhaft deinen Output postet und anhand dessen erklärst was dich genau stört.
grmg2010
grmg2010 Sep 23, 2021 at 05:02:46 (UTC)
Goto Top
Zitat von @Cloudrakete:

Abend,

ich hab das "Skript" mal auf einem unserer Hyper-Vs ausprobiert und da kommt doch genau das zurück, was man braucht?
Die Auflistung ist sogar automatisch in einem Table geordnet, daher verstehe ich deine Frage ehrlich gesagt nicht.
Du sagst, wenn du es in PowerShell ausführst, dann bekommst du das was du wünschst ausgegeben ... Dann stellt sich mir die Frage: wo führst du es sonst aus, wenn nicht in der Powershell?


Hilfreich wäre vielleicht, wenn du mal beispielhaft deinen Output postet und anhand dessen erklärst was dich genau stört.

Moin,

es kann sein, dass ich mich missverständlich ausgedrückt hatte. Wenn ich den Befehl in die PowerShell direkt eingebe, bekomme ich wie gewünscht das Ergebnis in Tabellenform. Füge ich den Befehl in mein Skript ein und rufe dieses dann auf, bleibt die PowerShell leer und das Skript wird weiter abgearbeitet. Das sehe ich daran, dass zwischen der Ausgabe des vorherigen Befehls und dem nachfolgenden Befehl eine Lücke bleibt.

Zur Verdeutlichung habe ich zwei Bilder eingefügt.
1
Aufruf im Skript, es wird nichts angezeigt
2
Aufruf ohne Skript, wie erwartet bekomme ich die Tabelle mit den vorhandenen Einträgen
149569
Solution 149569 Sep 23, 2021 updated at 05:47:48 (UTC)
Goto Top
Du solltest ja auch angeben wie du die Ausgabe formatiert haben wilst und das machst du ja nicht, du gibst quasi nur das Objekt aus ohne Formatierungsangaben, da entscheidet die Powershell dann selbst ob sie nach aktuellem Kontext was anzeigt oder nicht, also gib explizit an wie du es ausgeben willst
Get-VMSwitch | Format-Table Name,SwitchType

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
grmg2010
grmg2010 Sep 23, 2021 at 05:45:32 (UTC)
Goto Top
Zitat von @erikro:

Moin,

ich habe gerade kein Hyper-V-Host zur Verfügung und deshalb auch kein get-VMSwitch. Aber wenn Dir die normale Ausgabe des Befehls reicht, dann versuche es mal mit tee-object. Hier ein Beispiel mit get-childitem. Aber das geht mit jedem anderen Befehl auch:

> Get-ChildItem | Tee-Object -variable variable_without_dollar
> foreach($file in $variable_without_dollar) {
> 
>     write-output $file.fullname
> 
> }
> 

Und so sieht dann die Ausgabe aus:

> PS C:\Users\erik\Documents\ps-test> .\tee.ps1
> 
> 
>     Verzeichnis: C:\Users\erik\Documents\ps-test
> 
> 
> Mode                 LastWriteTime         Length Name
> ----                 -------------         ------ ----
> d-----        01.06.2020     20:31                April
> d-----        01.06.2020     20:31                xml
> -a----        23.04.2020     18:13            455 move.ps1
> -a----        22.09.2021     20:30            149 tee.ps1
> C:\Users\erik\Documents\ps-test\April
> C:\Users\erik\Documents\ps-test\xml
> C:\Users\erik\Documents\ps-test\move.ps1
> C:\Users\erik\Documents\ps-test\tee.ps1
> 

Wichtig ist, wenn Du die Ausgabe in einer Variablen speichern willst, dass Du den Namen ohne $ davor hinter -variable schreibst. Im weiteren Skript dann wieder mit $.

hth

Erik

Die Ausgabe ist leider nicht so schön wie beim eigentlichen Befehl aber zumindest ein Anfang. Danke dafür.
grmg2010
grmg2010 Sep 23, 2021 at 05:51:19 (UTC)
Goto Top
Zitat von @149569:

Du solltest ja auch angeben wie du die Ausgabe formatiert haben wilst und das machst du ja nicht, du gibst quasi nur das Objekt aus ohne Formatierungsangaben, da entscheidet die Powershell dann selbst ob sie nach aktuellem Kontext was anzeigt oder nicht, also gib explizit an wie du es ausgeben willst
> Get-VMSwitch | Format-Table Name,SwitchType
> 

Komisch, ich dachte ich hätte das bereits ausprobiert gehabt. Das ist aber auf jeden Fall die Lösung. Allerdings schneidet er bei mir den Namen ab, solange ich nur zwei Spalten wähle. Kann man das noch etwas anders formatieren oder ist das problematisch? Sonst lasse ich mir auch die Interfacebeschreibung anzeigen, das ist auch in Ordnung. Auf jeden Fall besser, als wenn die Switch-Namen nicht erkennbar sind.

Vielen Dank.
149569
149569 Sep 23, 2021 updated at 06:06:03 (UTC)
Goto Top
Zitat von @grmg2010:
Allerdings schneidet er bei mir den Namen ab, solange ich nur zwei Spalten wähle. Kann man das noch etwas anders formatieren oder ist das problematisch? Sonst lasse ich mir auch die Interfacebeschreibung anzeigen, das ist auch in Ordnung. Auf jeden Fall besser, als wenn die Switch-Namen nicht erkennbar sind.

Vielen Dank.

Das ist auch kein Problem, bräuchtest du dir nur mal die Parameter von format-table anschauen
Get-VMSwitch | format-table Name,SwitchType -AutoSize -Wrap