Das ist eigentlich ziemlich einfach zu tun und Ihr Darm über System.Drawing Gefühl war in der Tat richtig:
Add-Type -Assembly System.Drawing
$input | ForEach-Object { [Drawing.Image]::FromFile($_) }
speichern, die als Get-Image.ps1
irgendwo in Ihrem Weg und dann können Sie es verwenden.
Eine andere Möglichkeit wäre Folgendes zu Ihrer $profile
hinzuzufügen:
Add-Type -Assembly System.Drawing
function Get-Image {
$input | ForEach-Object { [Drawing.Image]::FromFile($_) }
}
, die so ziemlich das gleiche funktioniert. Fügen Sie natürlich tolle Dinge wie Dokumentation hinzu oder so, wie Sie es für richtig halten.
Sie können dann Verwendung es etwa so:
gci -inc *.jpg -rec | Get-Image | ? { $_.Width -eq 1024 -and $_.Height -eq 768 }
Beachten Sie, dass die Objekte auf diese Weise entsorgt werden nach der Verwendung von ihnen erstellt.
Natürlich können Sie eine benutzerdefinierte Dimension
Eigenschaft hinzufügen, so dass Sie für diesen Filter könnte:
function Get-Image {
$input |
ForEach-Object { [Drawing.Image]::FromFile($_) } |
ForEach-Object {
$_ | Add-Member -PassThru NoteProperty Dimension ('{0}x{1}' -f $_.Width,$_.Height)
}
}
Sie werden Sie in der Antwort darauf hinweisen, dass das Bild nach Abschluss der Aufgabe entsorgt werden sollte? Nur um andere Scripter zu erziehen. Dispose-Methode wird oft übersehen ... – stej
@stej: Eep, ok. Irgendeine Möglichkeit, dies richtig oder automatisch zu tun, außer dass% _ $ _. Dispose()} an das Ende der Pipeline angehängt wird? – Joey
Ich glaube nicht, dass es einen besseren Weg gibt, als es manuell zu tun, wie Sie es vorschlagen. Oder warten Sie bis zum Ende der Posh-Sitzung. Allerdings öffne ich normalerweise die Posh-Konsole, nachdem ich mich angemeldet habe, und schließe sie, bevor ich mich abmelde, das ist also nicht ideal. Versuchen/Schließlich könnte auch helfen, aber das ist Overhead. Ich denke eine Note ist genug und lass den Rest auf die Leser;) – stej