Che in realtà è abbastanza facile da fare e il vostro istinto su System.Drawing era in realtà corretto:
Add-Type -Assembly System.Drawing
$input | ForEach-Object { [Drawing.Image]::FromFile($_) }
Salva che, come Get-Image.ps1
qualche parte nel vostro percorso e quindi è possibile utilizzarlo.
Un'altra opzione sarebbe quella di aggiungere quanto segue al $profile
:
Add-Type -Assembly System.Drawing
function Get-Image {
$input | ForEach-Object { [Drawing.Image]::FromFile($_) }
}
che funziona più o meno lo stesso. Ovviamente, aggiungi cose fantastiche come la documentazione o come ritieni opportuno.
È quindi possibile uso in questo modo:
gci -inc *.jpg -rec | Get-Image | ? { $_.Width -eq 1024 -and $_.Height -eq 768 }
Si noti che è necessario disporre gli oggetti creati in questo modo dopo il loro utilizzo.
Naturalmente, è possibile aggiungere una personalizzato Dimension
proprietà così si potrebbe filtrare per questo:
function Get-Image {
$input |
ForEach-Object { [Drawing.Image]::FromFile($_) } |
ForEach-Object {
$_ | Add-Member -PassThru NoteProperty Dimension ('{0}x{1}' -f $_.Width,$_.Height)
}
}
Nella risposta si noterà che l'immagine deve essere eliminata al termine dell'attività? Solo per educare altri sceneggiatori. Il metodo di smaltimento è spesso trascurato ... – stej
@stej: Eep, ok. Qualunque modo di farlo in modo corretto o automatico eccetto il collegamento di '% {$ _. Dispose()}' alla fine della pipeline? – Joey
Non penso che ci sia un modo migliore di farlo manualmente come si propone. Oppure attendere fino alla fine della sessione Posh. Tuttavia, in genere apro la console Posh dopo aver effettuato il login e chiuso prima di disconnessione, quindi non è l'ideale. Provare/Infine potrebbe aiutare pure, ma quello è sovraccarico. Penso che una nota sia sufficiente e lasci il resto ai lettori;) – stej