In diesem Snippet habe ich eine Funktion (FDiskScan
), die einen Computernamen als Eingabe erhält und ein Array von Objekten zurückgeben sollte.PowerShell-Array erhält neue Einträge
function FDiskScan ([String] $name)
{
$outarray = [System.Collections.ArrayList]@()
$diskscan = Get-WmiObject Win32_logicaldisk -ComputerName $name
foreach ($diskobj in $diskscan)
{
if($diskobj.VolumeName -ne $null)
{
$max = $diskobj.Size/1024/1024/1024
$free = $diskobj.FreeSpace/1024/1024/1024
$full = $max - $free
$obj = @{
'ID' = $diskobj.deviceid
'Name' = $diskobj.VolumeName
'TotalSpace' = $max
'FreeSpace' = $free
'OccupiedSpace' = $full }
$TMP = New-Object psobject -Property $obj
$outarray.Add($TMP)
}
}
return $outarray
}
$pc = "INSERT PC NAME HERE"
$diskdata = [System.Collections.ArrayList]@()
$diskdata = FDiskScan($pc)
foreach ($disk in $diskdata)
{
Write-Host "Disco: " $disk.ID
Write-Host "Espaço Total: " ([math]::Round($disk.TotalSpace, 2)) "GB"
Write-Host "Espaço Ocupado: " ([math]::Round($disk.OccupiedSpace, 2)) "GB"
Write-Host "Espaço Livre" ([math]::Round($disk.FreeSpace, 2)) "GB" "`n"
}
Innerhalb der Funktion mit Debugging und die Variablen geht in ich, dass alles in Ordnung ist sehen, und wenn das Array aus der Funktion und in den Skriptbereich wird ergänzt es 2 weitere Einträge.
Im Debug-Modus sagt es mir, dass $outarry
innerhalb FDiskScan
hat die zwei Festplatten, die ich auf meinem System organisiert habe, wie sie sein sollten.
jedoch auf:
$diskdata = FDiskScan($pc)
Er sagt, dass es einen Eintrag des Wertes 0 auf Index 0 und der Wert 1 auf den Index 1, hat dann die Scheiben Anzug, erste Scheibe C folgen: in Index 3 und Scheibe D in Index 4.
Das erwartete Verhalten war für Index 0 und 1 mit Festplatten C und D bzw. keine Phantom 0 und 1 Einträge.
@ Eines ist PhaniAnne bewusst zu sein: '$ diskdata = FDiskScan ($ pc)' ist nicht der richtige Weg, um eine Funktion mit Powershell zu rufen. Der richtige Weg ist '$ diskdata = FDiskScan $ pc'. Der falsche Weg funktioniert mit einer einzigen Argumentfunktion, aber sobald Sie zu zwei Argumenten kommen, wie '$ diskdata = FDiskScan2 ($ pc, $ DriveType)' wird es nicht wie erwartet funktionieren. –
Sie denken, Sie rufen eine Funktion mit Argument 1 = '$ pc' und Argument 2 =' $ DriveType' auf, aber was Sie wirklich tun, ist den Aufruf der Funktion mit Argument 1 = ein Array von '($ pc, $ DriveType) 'und Argument 2 ist null. Der korrekte Aufruf der Funktion wäre '$ diskdata = FDiskScan2 $ pc $ DriveType'. –
@BaconBits Die Funktion ist, nur ein Argument zu haben, zumindest für jetzt. Aber ich danke Ihnen, dass Sie mich auf die bessere Art, Argumente zu schreiben, hingewiesen haben. Ich habe eine bessere Vorstellung von C wie Syntax, also manchmal werde ich gemischt, aber mit einigen der Details von Sprachen wie Powershell. –