marabunta
Goto Top

Powershell PSObject Liste erstellen und Ausgeben

Ich will eine Liste erstellen mit Dateiname, Dateiversion und Produktversion

Es werden einige Rechner abgefragt, falls möglich sollte es so ungefähr aussehen(hab mal produktversion ausgelassen):

Dateiname Sollversion Computer1 Computer2 Computer3
Baum        1.0        0.9        1.2        1.0
Ente        1.5        1.1        1.5        1.3

$Liste= New-Object PSObject

$Pfade=@{
"baum"="C:\Baum.dll"  
"Ente"="C:\Ente.dll"  
}

$Pfade.GetEnumerator() |Foreach{
$Datei= $_.key
$Pfad=$_.value

$ZielInhalt=gci $Pfad |select -ExpandProperty versioninfo
$ZielProduktversion=$ZielInhalt.ProductVersion
$ZielFileversion=$ZielInhalt.FileVersion

Add-Member -InputObject $Liste -MemberType NoteProperty -Name Dateiname -Value $Datei
Add-Member -InputObject $Liste -MemberType NoteProperty -Name ZielProduktversion -Value $ZielProduktversion
Add-Member -InputObject $Liste -MemberType NoteProperty -Name ZielFileversion -Value $ZielFileversion
}

$liste

Add-Member : Es kann kein Element mit dem Namen "ZielProduktversion" hinzugefügt werden, da bereits ein Element mit diesem Namen vorhanden   
ist. Wenn Sie das Element trotzdem überschreiben möchten, verwenden Sie dafür den Force-Parameter.
In C:\Version.ps1:262 Zeichen:1
+ Add-Member -InputObject $Liste -MemberType NoteProperty -Name ZielProduktversion ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (@{Dateiname=Too...ion=3.0.0.0   }:PSObject) [Add-Member], InvalidOperationException
    + FullyQualifiedErrorId : MemberAlreadyExists,Microsoft.PowerShell.Commands.AddMemberCommand

Content-Key: 278498

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

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: 114757
Lösung 114757 27.07.2015 aktualisiert um 15:10:29 Uhr
Goto Top
Moin Marabunta,
du kannst bei einem Custom Object eine Spalte(Eigenschaft) nur einmal hinzufügen, d.h. das du dein Objekt außerhalb der Schleife erstellen solltest wenn du Add-Member benutzt. Deswegen auch die Fehlermeldung die das ja auch schon sagt face-wink

z.B. so
$Liste = @()
$computer = @('Computer1','Computer2','Computer2')  

$pfade=@{
    "Baum"="\c$\Baum.dll"  
    "Ente"="\c$\Ente.dll"  
}

$pfade.GetEnumerator() | %{
    $Datei = $_.Key
    $pfad = $_.Value 
    $obj = New-Object PSObject -Property @{"Dateiname"=$Datei}  
    $computer | %{
        gci "\\$computer$pfad" | %{  
            $obj | Add-Member -MemberType NoteProperty -Name $_ -Value $_.VersionInfo.FileVersion
        }
    }
    $liste += $obj
}
$liste
Gruß jodel32