Powershell Remote HDD Speicher auslesen
Hallo,
ich habe folgenden Befehl:
Der funktioniert auch nur wird für jeden Server ein eigenes ogv Fenster geöffnet. Ich hätte gerne, dass alle Server in einem Fenster dargestellt werden. Die Auswahl der Server erfolgt über eine Listbox.
Gruß
Bugger
ich habe folgenden Befehl:
gwmi win32_logicaldisk -Computer $server -filter "drivetype=3" |
select @{n="Server";e={$server}},DeviceID,VolumeName,@{Name="Size";Expression={"{0:N1}" -f ($_.Size/1gb)}},@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1gb)}} | Out-GridView
Der funktioniert auch nur wird für jeden Server ein eigenes ogv Fenster geöffnet. Ich hätte gerne, dass alle Server in einem Fenster dargestellt werden. Die Auswahl der Server erfolgt über eine Listbox.
Gruß
Bugger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264388
Url: https://administrator.de/contentid/264388
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
12 Kommentare
Neuester Kommentar
Hallo Bugger,
du packst deine Objekte einfach zusammen in ein Array. Beispiel:
Grüße Uwe
du packst deine Objekte einfach zusammen in ein Array. Beispiel:
$arr = @()
$servers = @("ServerA","ServerB","ServerC")
foreach($server in $servers){
$arr += (gwmi win32_logicaldisk -Computer $server -filter "drivetype=3" | select @{n="Server";e={$server}},DeviceID,VolumeName,@{Name="Size";Expression={"{0:N1}" -f ($_.Size/1gb)}},@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1gb)}})
}
$arr | ogv
Zitat von @Bugger:
Aber das ist schon in einem Array und bei den anderen Befehlen funktioniert es. Server = etc. würde auch nicht funktionieren,
da die Auswahl ja über eine GUI mit Listbox erfolgt.
Du hast mich falsch verstanden .... schau dir den Code doch erst mal genau an / die Server sind nur als Beispiel eingefügt ... ich meine die Daten des selects !Aber das ist schon in einem Array und bei den anderen Befehlen funktioniert es. Server = etc. würde auch nicht funktionieren,
da die Auswahl ja über eine GUI mit Listbox erfolgt.
Die Daten werden als Object in ein weiteres Array gepackt (arr) bzw. damit zusammengefasst und erst zum Schluss an OGV gepiped !!
Ich will ein Help kaufen und bitte um Auflösung
Sorry, aber dann beschreibe dein Vorhaben besser .. das tut hie nämlich das von dir "wage" beschriebene !!
Neinnnnnnnnnn....
Meine Servers Schleife diente nur zu einer funktionsfähigen Demo damit es ausprobiert werden kann !!!!!!! Die bindest du natürlich nicht mit ein die hast du ja selber schon !
Dein Aufbau ist falsch. Nach deinen dürftigen Schnippseln von oben sieht das so aus
Der Sinn dahinter ist einfach. Das Array $arr dient dazu die Objekte der Server in einem Array gebündelt zu sammeln. Das hinzufügen zum Array geschieht mit dem Zuweisungsoperator +=. Erst nachdem die Schleife fertig ist wird dann das Array an Out-GridView gepiped.
Das sollte nun aber verständlich genug gewesen sein.
Meine Servers Schleife diente nur zu einer funktionsfähigen Demo damit es ausprobiert werden kann !!!!!!! Die bindest du natürlich nicht mit ein die hast du ja selber schon !
Dein Aufbau ist falsch. Nach deinen dürftigen Schnippseln von oben sieht das so aus
$arr = @()
foreach ($server in $script:x){
if ( $checkHDD.Checked -eq $true ){
$arr += (gwmi win32_logicaldisk -Computer $server -filter "drivetype=3" | select @{n="Server";e={$server}},DeviceID,VolumeName,@{Name="Size";Expression={"{0:N1}" -f ($_.Size/1gb)}},@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1gb)}})
}
}
$arr | ogv
Das sollte nun aber verständlich genug gewesen sein.
gehen zwei ogv Fenster auf.
Weil du es wieder alles verdoppelt hast !!!!!!!!!!!! Das habe ich doch oben extra geschrieben. Und du hast es wieder doppelt gemoppelt gemacht .... Du hast zwei verschachtelte Schleifen erzeugt !- Zeile 136 kommt vor Zeile 112
- Die Foreach-Schleife in Zeile 137 kommt weg
- und Zeile 142 muss außerhalb deiner Server-Schleife also hinter Zeile 144 stehen
write-host "Loading..." -ForegroundColor Red
$Script:x = @()
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Gui"
$objForm.Size = New-Object System.Drawing.Size(475,450)
$objForm.StartPosition = "CenterScreen"
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20)
$objLabel.Size = New-Object System.Drawing.Size(100,20)
$objLabel.Text = "Server auswählen:"
$objForm.Controls.Add($objLabel)
$objListbox = New-Object System.Windows.Forms.Listbox
$objListbox.Location = New-Object System.Drawing.Size(10,40)
$objListbox.Size = New-Object System.Drawing.Size(180,20)
$objListbox.SelectionMode = "MultiExtended"
[void] $objListbox.Items.Add("Server1")
[void] $objListbox.Items.Add("Server2")
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")
{$objForm.Close()}})
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(320,20)
$objLabel.Size = New-Object System.Drawing.Size(130,20)
$objLabel.Text = "Software deinstallieren:"
$objForm.Controls.Add($objLabel)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(320,210)
$objLabel.Size = New-Object System.Drawing.Size(130,20)
$objLabel.Text = "Tools:"
$objForm.Controls.Add($objLabel)
############################################## Start check boxes
$checkFirefoxUn = New-Object System.Windows.Forms.checkbox
$checkFirefoxUn.Location = New-Object System.Drawing.Size(325,40)
$checkFirefoxUn.Size = New-Object System.Drawing.Size(100,20)
$checkFirefoxUn.Text = "Firefox"
$checkFirefoxUn.Checked = $false
$objForm.Controls.Add($checkFirefoxUn)
$checkHDD = New-Object System.Windows.Forms.checkbox
$checkHDD.Location = New-Object System.Drawing.Size(325,230)
$checkHDD.Size = New-Object System.Drawing.Size(120,20)
$checkHDD.Text = "HDD Platz prüfen"
$checkHDD.Checked = $false
$objForm.Controls.Add($checkHDD)
############################################## end check boxes
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,310)
$objLabel.Size = New-Object System.Drawing.Size(140,30)
$objLabel.Text = "Eigenen Server eintragen xxx - Enter:"
$objForm.Controls.Add($objLabel)
$objTextBox = New-Object System.Windows.Forms.TextBox
$objTextBox.Location = New-Object System.Drawing.Size(10,340)
$objTextBox.Size = New-Object System.Drawing.Size(180,20)
$objForm.Controls.Add($objTextBox)
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(20,370)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$objForm.Controls.Add($OKButton)
$OKButton.Add_Click({
$Script:x += $objListbox.SelectedItems
$objForm.Close()
})
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(110,370)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)
$objTextBox.Add_KeyPress({
if ($_.KeyChar -eq 13) {
$objListbox.Items.Add($objTextBox.Text)
}
})
$objListbox.Height = 270
$objForm.Controls.Add($objListbox)
############################################## End Functions
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
write-host "Gewählte Server:" -ForegroundColor Green
$script:x
$arr = @()
foreach ($server in $script:x){
############################################## Deinstallation
if ( $checkFirefoxUn.Checked -eq $true )
{
if (Test-Path -path "\\$server\c$\Program Files (x86)\")
{
Write-Output "Deinstalliere Firefox..."
$process9 = ([WMICLASS]"\\$server\ROOT\CIMV2:win32_process").Create("C:\Program Files (x86)\Mozilla Firefox\uninstall\helper.exe -ms")
[string]$ID = $process9.ProcessID
Write-Output "Waiting for process $ID to finish Firefox on $server"
while (Test-Process $process9.ProcessId $server) { sleep -Milliseconds 200 } # Wait for terminate
}
else
{
Write-Output "Deinstalliere Firefox..."
$process9 = ([WMICLASS]"\\$server\ROOT\CIMV2:win32_process").Create("C:\Programme (x86)\Mozilla Firefox\uninstall\helper.exe -ms")
[string]$ID = $process9.ProcessID
Write-Output "Waiting for process $ID to finish Firefox on $server"
while (Test-Process $process9.ProcessId $server) { sleep -Milliseconds 200 } # Wait for terminate
}
}
if ( $checkHDD.Checked -eq $true ){
$arr += (gwmi win32_logicaldisk -Computer $server -filter "drivetype=3" | select @{n="Server";e={$server}},DeviceID,VolumeName,@{Name="Size";Expression={"{0:N1}" -f ($_.Size/1gb)}},@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1gb)}})
}
}
$arr | ogv
Grüße Uwe