niedziela, 16 lutego 2014

Wyświetlanie zdjęć w PS

Brakowało mi polecenia w PS, które mogło by wyświetlić zdjęcie. Niestety nie mogłem znaleźć takiego polecenia i postanowiłem napisać funkcyjkę :)

[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
function Show-Image
{   
    [CmdletBinding(DefaultParametersetName="s")] 
    param(
    [Parameter(ParameterSetName="f", Position=0,ValueFromPipeline=$true)] 
    [System.IO.FileInfo]$fileInfo,

    [Parameter(ParameterSetName="s", Position=0,ValueFromPipeline=$true)] 
    [string]$filePath
    )

    begin{
        [System.Windows.Forms.Application]::EnableVisualStyles()
        $form = new-object Windows.Forms.Form
        $pictureBox = new-object Windows.Forms.PictureBox
        $form.controls.add($pictureBox)
        $form.Add_Shown( { $form.Activate() } )
        $form.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterParent        
    }

    process{
        switch ($PsCmdlet.ParameterSetName) 
        { 
 
        "f" {
                $file = $fileInfo
            }
        "s" {
                $fileInfo =get-item $filePath
            }
        }

        $fileName = $fileInfo.FullName
        $img = [System.Drawing.Image]::Fromfile($fileInfo)
        
        $form.Text = $fileName
        $form.Width = $img.Size.Width 
        $form.Height =  $img.Size.Height
        $pictureBox.Width =  $img.Size.Width
        $pictureBox.Height =  $img.Size.Height
        $pictureBox.Image = $img
        [void]$form.ShowDialog()

        $img.Dispose()
    }
    end{
    $pictureBox.Dispose()
    $form.Dispose()
    }
}
Wywołanie jest w formie pipu:
gi .\image.jpg |show-image
A tak wygląda funkcja w akcji:

Brak komentarzy:

Prześlij komentarz