[CmdletBinding(SupportsShouldProcess,ConfirmImpact="Medium")]param( [Parameter(ParameterSetName="Normal",ValueFromPipeline,ValueFromPipelineByPropertyName)] [string[]]$ImageMagickPath, [Parameter(ParameterSetName="Normal",ValueFromPipelineByPropertyName)] [string]$PageOutputName, [Parameter(ParameterSetName="Normal")] [string]$OutputPath, [Parameter(ParameterSetName="Normal")] [string]$OutputImageFormat = "png", [Parameter(ParameterSetName="Normal")] [string]$OutputImageExtension, [Parameter(ParameterSetName="Normal")] [string[]]$MagickArgs, [Parameter(ParameterSetName="Normal")] [switch]$Force, [Parameter(ParameterSetName="Reset")] [switch]$ResetConfirm ) BEGIN{ if( $ResetConfirm ) { Remove-Variable imagemagick_* -Force Remove-Variable imagemagick_* -Force return } if( -not $OutputImageExtension ) { $OutputImageExtension = $OutputImageFormat.ToLower() } $OutputImageExtension = $OutputImageExtension -replace '\.*(.+)$','.$1' if( ! (Test-Path variable:global:imagemagick_noToAll) ) { $imagemagick_noToAll = $PSBoundParameters.ContainsKey('WhatIf'); $imagemagick_yesToAll = $ConfirmPreference -gt 'Low' -and -not $imagemagick_noToAll } } PROCESS{ if( $ResetConfirm ) { return } $ImageMagickPath | ForEach-Object { $local:i = [PSCustomObject]@{ ImageMagickPath = $_ PageOutputName = $( if( $PageOutputName ) { "$($PageOutputName)$OutputImageExtension" } else { [System.IO.Path]::GetFileName($_) -replace "(\.[A-Z]+)(?:\[(\d+)\])?$",'_$2.' -replace '_?\.$',$OutputImageExtension } ) OutputPath = $OutputPath } if( -not $i.OutputPath ) { $i.OutputPath = Join-Path ([System.IO.Path]::GetDirectoryName($i.ImageMagickPath)) $OutputImageFormat } if( !$imagemagick_noToAll ) { try { if( -not (Test-Path -LiteralPath $i.OutputPath) ) { if( $Force ) { New-Item -ItemType Directory -Path $i.OutputPath -Force } else { throw "Output directory $($i.OutputPath) does not exist!" } } } catch { Write-Error $_ $imagemagick_noToAll = $true return }} $local:outFilePath = Join-Path $i.OutputPath $i.PageOutputName $local:magickCmdLine=@("convert",$i.ImageMagickPath)+$MagickArgs+@($outFilePath) | Where-Object {$_} Write-Verbose "$(if( $imagemagick_noToAll ) { "Skipping" } else {"Running"} ): & magick $magickCmdLine" if( $PSCmdlet.ShouldContinue( "Convert", "$($i.ImageMagickPath) to $outFilePath", [ref]$imagemagick_yesToAll, [ref]$imagemagick_noToAll ) ) { & magick $magickCmdLine Write-Verbose "Error state: $?" if( $? -and (Test-Path $outFilePath) ) { Get-Item $outFilePath } } } } END{ if( $ResetConfirm ) { return } $global:imagemagick_yesToAll = $imagemagick_yesToAll $global:imagemagick_noToAll = $imagemagick_noToAll }