136430
Goto Top

Powershell Ausgabeproblem

Ich habe zwei Probleme bei der Ausgabe in einem Ausgabefenster:

Ich gebe mit einem Befehl eine Pingabfrage in einem Ausgabefenster aus. Das funktioniert und zwar mit dem Befehl "Out-String"

Meine Funktion lautet:

$Pingabfrage={
    
    
    $hosts= $DropDownBox.SelectedItem.ToString()
    $PingAusgabe = Test-Connection -ComputerName $hosts -Count 3 -ErrorAction 0  | out-string  
     $AusgabeFeld.text= $PingAusgabe

}

In meinem Ausgabfenster kommt dann auch fleißig

Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms) 
------        -----------     -----------      -----------                              -----    -------- 
Host        Host         192.168.XX.XX                                             32       0        
Host        Host         192.168.XX.XX                                             32       0        
Host        Host         192.168.XX.XX                                             32       0

Ich bräuchte nur die Spalten Source, Destination, IPV4Address und Time(ms), komme aber nicht auf den Trichter wie ich das mache? Könnt ihr mir weiterhelfen?


Mein zweites Problem ist eine Festplattenabfrage, sie funktioniert in Powershell aber nicht in meiner Gui, in meinem Ausgabefenster bleibt es zappenduster oder es kommen lauter hyroglyphen


$HDDabfrage={

    
    $hosts= $DropDownBox.SelectedItem.ToString()
    $HDDausgabe = Invoke-Command -ComputerName $hosts -Credential XXXXX -ScriptBlock { Get-PSDrive -used }
    $AusgabeFeld.text= $HDDausgabe


}

habt ihr einen Rat?

Content-Key: 378445

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: Penny.Cilin
Penny.Cilin Jun 27, 2018 at 11:38:42 (UTC)
Goto Top
Hallo,

ich bin jetzt nicht der Powershell Experte, aber nutze dazu die Pipe mittels select, oder where.

Gruss Penny.
Member: colinardo
colinardo Jun 27, 2018 updated at 11:51:06 (UTC)
Goto Top
> Ich bräuchte nur die Spalten Source, Destination, IPV4Address und Time(ms), komme aber nicht auf den Trichter wie ich das mache? Könnt ihr mir weiterhelfen?
Powershell hantiert mit Objekten nicht nur mit Strings, also nutze sie auch ... Welche Eigenschaften mit welchen Namen es gibt zeigt dir ein <Befehl>| fl * in der Konsole an. Bei Test-Connection ist es so das die tatsächlichen Eigenschaften nicht alle gleich der Ausgabe sind:
$PingAusgabe = Test-Connection -ComputerName $hosts -Count 3 -ErrorAction 0  | ft PsComputerName,Address,IPv4Address,ResponseTime -AutoSize -Wrap | out-string
Mein zweites Problem ist eine Festplattenabfrage, sie funktioniert in Powershell aber nicht in meiner Gui, in meinem Ausgabefenster bleibt es zappenduster oder es kommen lauter hyroglyphen
Get-PSDrive -used
Weil du die Rückgabe nicht als String formatierst, sondern als Objekt in das Textfeld übergibst..., außerdem gibt es den Parameter -used nicht.
$HDDausgabe = Invoke-Command -ComputerName $hosts -Credential XXXXX -ScriptBlock { Get-PSDrive | ft Name,Used,Free -AutoSize -Wrap | out-string }
Grüße Uwe
Member: erikro
erikro Jun 27, 2018 at 11:51:03 (UTC)
Goto Top
Moin,

zum ersten Problem:

Test-Connection -ComputerName fileserver  -Count 3 -ErrorAction 0 | select-object PSComputerName,Address,IPV4Address,ResponseTime

Frag mich jetzt nicht, wie Du die Überschriften änderst. ;)

Zum zweiten Problem: Den Parameter -used gibt es bei get-psdrive nicht.

PS XXX> get-psdrive -used
Get-PSDrive : Es wurde kein Parameter gefunden, der dem Parameternamen "used" entspricht.  
In Zeile:1 Zeichen:13
+ get-psdrive -used
...

hth

Erik
Member: colinardo
colinardo Jun 27, 2018 updated at 11:56:31 (UTC)
Goto Top
Frag mich jetzt nicht, wie Du die Überschriften änderst. ;)
Mit einer Calculated Property z.B. ...
Test-Connection -ComputerName $hosts -Count 3 -ErrorAction 0 | select @{n='Source';e={$_.PSComputerName}},@{n='Destination';e={$_.Address}},IPV4Address,ResponseTime 
Das wollte ich dem TO "noch" nicht zumuten, da bekommt er ja vollkommen die Klatsche face-smile.
Member: Penny.Cilin
Penny.Cilin Jun 27, 2018 updated at 11:59:04 (UTC)
Goto Top
Zitat von @erikro:

Moin,

zum ersten Problem:

Test-Connection -ComputerName fileserver  -Count 3 -ErrorAction 0 | select-object PSComputerName,Address,IPV4Address,ResponseTime

Frag mich jetzt nicht, wie Du die Überschriften änderst. ;)

Zum zweiten Problem: Den Parameter -used gibt es bei get-psdrive nicht.

PS XXX> get-psdrive -used
> Get-PSDrive : Es wurde kein Parameter gefunden, der dem Parameternamen "used" entspricht.  
> In Zeile:1 Zeichen:13
> + get-psdrive -used
> ...

Du slltest den Code auch richtig schreiben:
get-psdrive | ft used
funktioniert hier wie gewünscht.

hth

Erik
Gruss penny.
Mitglied: 136430
136430 Jun 27, 2018 at 12:07:02 (UTC)
Goto Top
Zitat von @colinardo:

> Ich bräuchte nur die Spalten Source, Destination, IPV4Address und Time(ms), komme aber nicht auf den Trichter wie ich das mache? Könnt ihr mir weiterhelfen?
Powershell hantiert mit Objekten nicht nur mit Strings, also nutze sie auch ... Welche Eigenschaften mit welchen Namen es gibt zeigt dir ein <Befehl>| fl * in der Konsole an. Bei Test-Connection ist es so das die tatsächlichen Eigenschaften nicht alle gleich der Ausgabe sind:
> $PingAusgabe = Test-Connection -ComputerName $hosts -Count 3 -ErrorAction 0  | ft PsComputerName,Address,IPv4Address,ResponseTime -AutoSize -Wrap | out-string
> 
Mein zweites Problem ist eine Festplattenabfrage, sie funktioniert in Powershell aber nicht in meiner Gui, in meinem Ausgabefenster bleibt es zappenduster oder es kommen lauter hyroglyphen
Get-PSDrive -used
Weil du die Rückgabe nicht als String formatierst, sondern als Objekt in das Textfeld übergibst..., außerdem gibt es den Parameter -used nicht.
> $HDDausgabe = Invoke-Command -ComputerName $hosts -Credential XXXXX -ScriptBlock { Get-PSDrive | ft Name,Used,Free -AutoSize -Wrap | out-string }
> 
Grüße Uwe

Danke für die Hilfe mit den Objekten!, allerdings sind die Spalten sehr eng bei einander, wie kann ich die Abstände vergrößern?

Bei der HDD Ausgabe werden mir die Größen in bytes angegeben ich habe versucht es in GB umzuwandeln mit folgender Zeile:

-ScriptBlock { Get-PSDrive | ft Name,Name="Free";Expression={[math]::round($_.used/1gb,2)} -AutoSize -Wrap  | out-string  }  

Allerdings wird mir dann im Ausgabefenster der GUI folgende Zeilen angezeigt:

Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData 
Member: colinardo
colinardo Jun 27, 2018 updated at 12:17:47 (UTC)
Goto Top
Zitat von @136430:
Danke für die Hilfe mit den Objekten!, allerdings sind die Spalten sehr eng bei einander, wie kann ich die Abstände vergrößern?
-AutoSize weglassen. Aber noch besser wäre es wenn du gleich ein DataGridView für die Anzeige benutzt oder an Out-GridView sendest!
Bei der HDD Ausgabe werden mir die Größen in bytes angegeben ich habe versucht es in GB umzuwandeln mit folgender Zeile:

-ScriptBlock { Get-PSDrive | ft Name,Name="Free";Expression={[math]::round($_.used/1gb,2)} -AutoSize -Wrap  | out-string  }  

Allerdings wird mir dann im Ausgabefenster der GUI folgende Zeilen angezeigt:

Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData 
Kein Problem
get-PSDrive | ft Name,@{n='Size';e={"{0:F2}" -f ($_.Used/1GB)}} | out-string
Allerdings wird mir dann im Ausgabefenster der GUI folgende Zeilen angezeigt:
Weil deine Variable noch von dem Typ ist, von vorherigen Versuchen, schließe deine Umgebung starte sie neu und alles wird gut face-smile.

Du solltest dir besser zuerst mal die Formatting und Object Basics beibringen, nur mal so als Vorschlag.
Mitglied: 136430
136430 Jun 27, 2018 at 12:31:26 (UTC)
Goto Top
-AutoSize weglassen. Aber noch besser wäre es wenn du gleich ein DataGridView für die Anzeige benutzt oder an Out-GridView sendest!

lasse ich Autosize und/oder grid weg bleibt es so wie es vorher war, mit DataGridView und Out-GridView bin ich überfragt face-sad

Kein Problem
get-PSDrive | ft Name,@{n='Size';e={"{0:F2}" -f ($_.Used/1GB)}} | out-string  

get-PSDrive | ft Name,@{n='Size';e={"{0:F2}" -f ($_.Used/1GB)}} | out-string  

Leider sind die beiden Spalten total verrutscht, zeile für zeile. Es liegt wohl am ausgabefenster, in der powershell cmd ist es schön untereinander, dann fehlt mir noch die Spalte des freien Speichers.

 Du solltest dir besser zuerst mal die Formatting und Object Basics beibringen, nur mal so als Vorschlag.

Da bin ich drauf und drann und danke nochmals, dass du mir immer mit Rat und Tat zur Seite stehst, ich suche noch eine ordentliche Literatur, damit ich es besser lerne
Member: colinardo
colinardo Jun 27, 2018 updated at 12:37:39 (UTC)
Goto Top
Zitat von @136430:
lasse ich Autosize und/oder grid weg bleibt es so wie es vorher war, mit DataGridView und Out-GridView bin ich überfragt face-sad
Och mensch Doku lesen:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Kein Problem
> get-PSDrive | ft Name,@{n='Size';e={"{0:F2}" -f ($_.Used/1GB)}} | out-string  
> 
> get-PSDrive | ft Name,@{n='Size';e={"{0:F2}" -f ($_.Used/1GB)}} | out-string  

Leider sind die beiden Spalten total verrutscht, zeile für zeile. Es liegt wohl am ausgabefenster, in der powershell cmd ist es schön untereinander, dann fehlt mir noch die Spalte des freien Speichers.

 Du solltest dir besser zuerst mal die Formatting und Object Basics beibringen, nur mal so als Vorschlag.
Deswegen gleich ein DataGridView als Steuerelement verwenden statt eine Textbox, format-table etc. sind gänzlich ungeeignete Mittel dafür !!!!

Beispiele wie das mit DataGridview geht habe ich hier schon zu Hauf gepostet, einfach mal in meinen Threads nachblätten, das wiederhole ich jetzt nicht nochmal.

Powershell: DataGrid Formatieren, Breite automatisch anpassen funktioniert nicht

usw.
Member: colinardo
Solution colinardo Jun 27, 2018 updated at 12:45:12 (UTC)
Goto Top
Also hier ausnahmsweise nochmal schnell als simples Beispiel wie du Daten in einem DataGridView-Control darstellst, allemal besser als dieser Textbox-Strunz.
Das DGV Control lässt sich in vielfältiger Weise an die Bedürfnisse anpassen.

Damit solltest du nun in der Lage sein das gleiche zu machen! Die interessanten Zeilen sind ab Zeile 16 zu sehen.

function GenerateForm {

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$dgv = New-Object System.Windows.Forms.DataGridView
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

$handler_form1_Load= 
{
    $data = Get-PSDrive | select Name,@{n='Size(GB)';e={"{0:F2}" -f ($_.Used / 1GB)}}  
    $arrList = New-Object System.Collections.ArrayList
    $arrList.AddRange(@($data))
    $dgv.DataSource = $arrList
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 206
$System_Drawing_Size.Width = 294
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"  
$form1.Text = "DataGridView"  
$form1.add_Load($handler_form1_Load)

$dgv.Anchor = 15
$dgv.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$dgv.Location = $System_Drawing_Point
$dgv.Name = "dgv"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 182
$System_Drawing_Size.Width = 270
$dgv.Size = $System_Drawing_Size
$dgv.TabIndex = 0

$form1.Controls.Add($dgv)

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

#Call the Function
GenerateForm
Member: Penny.Cilin
Solution Penny.Cilin Jun 27, 2018 at 13:02:39 (UTC)
Goto Top
Zitat von @136430:

Da bin ich drauf und drann und danke nochmals, dass du mir immer mit Rat und Tat zur Seite stehst, ich suche noch eine ordentliche Literatur, damit ich es besser lerne
Schau mal im Internet nach Tobias Weltner - Mastering PowerShell. Das findest Du als PDF und ist kostenfrei.

@colinardo
Nimm bitte etwas mehr Rücksicht mit uns PowerShell Anfängern. Leider erschließt sich PowerShell nicht jedem und auch nicht sofort. Vor allen Dingen durch die für mich unübersichtliche Anzahl der Objekten. Und es erleichtert nicht grade das lernen, wenn es um den Einsatz der Parameter geht. Mal müssen diese benannt werden, mal muss die Reihenfolge eingehalten werden, mal ist es egal.

Gruss Penny.
Member: colinardo
colinardo Jun 27, 2018 updated at 13:09:54 (UTC)
Goto Top
Mal müssen diese benannt werden, mal muss die Reihenfolge eingehalten werden, mal ist es egal.
Das ergibt sich aus der Doku für das CMDLet und dessen Parameter, wenn für einen Parameter die Eigenschaft "Position" definiert ist kann der Parametername weggelassen werden , dann muss aber dessen Reihefolge stimmen damit die Shell sie richtig zuweisen kann, also eigentlich ganz logisch. Die Powershell basiert halt auf dem NET Framework da erklärt sich von selbst das der Funktionsumfang sehr viel größer ist. Aber wer lesen kann ist wie immer im Vorteil.
Beispiel hat er oben bekommen, wie er das vernünftig löst.Also alles paletti.
Member: erikro
erikro Jun 27, 2018 at 13:34:06 (UTC)
Goto Top
Moin,

Zitat von @Penny.Cilin:

Du slltest den Code auch richtig schreiben:
get-psdrive | ft used
funktioniert hier wie gewünscht.


Das steht aber beim TO nicht. Da steht das so:

$HDDausgabe = Invoke-Command -ComputerName $hosts -Credential XXXXX -ScriptBlock { Get-PSDrive -used } 

face-wink

Liebe Grüße

Erik
Member: erikro
erikro Jun 27, 2018 at 13:35:02 (UTC)
Goto Top
Zitat von @colinardo:
Das wollte ich dem TO "noch" nicht zumuten, da bekommt er ja vollkommen die Klatsche face-smile.

So war das gemeint, dass er besser nicht fragen soll. face-wink
Mitglied: 136430
136430 Jul 02, 2018 at 05:35:35 (UTC)
Goto Top
Zitat von @Penny.Cilin:

Zitat von @136430:

Da bin ich drauf und drann und danke nochmals, dass du mir immer mit Rat und Tat zur Seite stehst, ich suche noch eine ordentliche Literatur, damit ich es besser lerne
Schau mal im Internet nach Tobias Weltner - Mastering PowerShell. Das findest Du als PDF und ist kostenfrei.

Danke für den Tipp ich habe mir die PDF geholt und habe sie bereits angefangen, eine Frage hätte ich noch, ich schreibe Scripte (mit GUI) mit Powershell ISE, gibt es eine bessere Alternative auch für Anfänger? Ich habe Powershell Studio 2018 ausfindig gemacht (kostet) und ist für mich als Anfänger dann doch relativ schwierig.

@colinardo
Nimm bitte etwas mehr Rücksicht mit uns PowerShell Anfängern. Leider erschließt sich PowerShell nicht jedem und auch nicht sofort. Vor allen Dingen durch die für mich unübersichtliche Anzahl der Objekten. Und es erleichtert nicht grade das lernen, wenn es um den Einsatz der Parameter geht. Mal müssen diese benannt werden, mal muss die Reihenfolge eingehalten werden, mal ist es egal.

Gruss Penny.

Das ist schon ok, ich tu mich derzeit schwer aber das wird schon und colinardo hilft mir (wie andere Forenteilnehmer auch) immer bis ich zur Lösung komme face-smile
Member: Penny.Cilin
Penny.Cilin Jul 02, 2018 at 07:35:30 (UTC)
Goto Top
Hallo Schiggi,

ich gehe mal davon aus, daß Du ein aktuelles Windows (10?) verwendest. Solltest Du eine ältere Windows Version nutzen, kannst mit dem Update auf WMF v5.1 (Windows Management Framework) PowerShell aktualisieren. Dann wird auch die ISE aktualisiert.
Diese ist eigentlich ganz gut.

Alternative kannst Du Dir
- PowerShellPlus Professional Edition
- PowerGUI Script Editor
anschauen. Welche noch Freeware sein sollten.
Von Tobias Weltner gibt es auch noch eine GUI.

Wobei ich beide etwas oversized finde. Bleibe erstmal bei der ISE. Nur so meinen Meinung.

Gruss Penny.
Member: colinardo
colinardo Jul 02, 2018 updated at 07:47:06 (UTC)
Goto Top
Ich habe hier auch noch die Primal Forms Community Edition liegen die Quasi ein reiner schlanker GUI Editor des großen Bruders ist und dir das Powershell Gerüst für deine GUI liefert was du dann in der ISE weiterverwenden kannst. Die Edition bietet der Hersteller nicht mehr als Download an, war aber damals frei zu haben und ist immer noch nützlich um schnell mal eine GUI zusammen zu klicken. Wenn du Interesse hast, kurze PN und ich lasse dir gerne einen Link zukommen.

Grüße Uwe
Mitglied: 136430
136430 Jul 02, 2018 at 09:11:09 (UTC)
Goto Top
Zitat von @Penny.Cilin:

Hallo Schiggi,

ich gehe mal davon aus, daß Du ein aktuelles Windows (10?) verwendest. Solltest Du eine ältere Windows Version nutzen, kannst mit dem Update auf WMF v5.1 (Windows Management Framework) PowerShell aktualisieren. Dann wird auch die ISE aktualisiert.
Diese ist eigentlich ganz gut.

Alternative kannst Du Dir
- PowerShellPlus Professional Edition
- PowerGUI Script Editor
anschauen. Welche noch Freeware sein sollten.
Von Tobias Weltner gibt es auch noch eine GUI.

Wobei ich beide etwas oversized finde. Bleibe erstmal bei der ISE. Nur so meinen Meinung.

Gruss Penny.

Hi Penny,

ich nutze Powershell bzw. Powershell ISE unter Windows 10, danke für die Linktipps die ich mir gerade zu Gemüte führe.