diff --git a/ImageMagick/Convert-WithImageMagick.ps1 b/ImageMagick/Convert-WithImageMagick.ps1 new file mode 100644 index 0000000..d0f4994 --- /dev/null +++ b/ImageMagick/Convert-WithImageMagick.ps1 @@ -0,0 +1,87 @@ +[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 +} diff --git a/ImageMagick/Get-TiffPages.ps1 b/ImageMagick/Get-TiffPages.ps1 new file mode 100644 index 0000000..68ea7e3 --- /dev/null +++ b/ImageMagick/Get-TiffPages.ps1 @@ -0,0 +1,33 @@ +[CmdletBinding()]param( + [string[]]$SrcPath, + [string]$FilePattern="*.tif", + [int]$PageNumberDigits=3, + [switch]$Force +) + +Remove-TypeData -TypeName "ImageMagickPagesz" -ErrorAction Ignore -Confirm:$false +Update-TypeData -TypeName "ImageMagickPagesz" -DefaultDisplayPropertySet 'ImageMagickPath', 'Page' -Force -Confirm:$false + +$local:PageNumberFormat="D$PageNumberDigits" +Get-ChildItem $(Join-Path $SrcPath $FilePattern) -Force:$Force | + ForEach-Object { + $local:f = $_; + & magick identify $f.FullName | ForEach-Object { + $local:p = [ordered]@{ + PSTypeName = "ImageMagickPagesz" + PSFile = $f + BaseName = $f.BaseName + ImageMagickPath = $_ -ireplace " TIFF \d+x\d+ \d+x\d+\+\d+\+\d .*$","" + Page = 0 + PageOutputName = [string]::Empty + } + if( $p.ImageMagickPath -match '.*\[(\d+)\]$' ) { + $p.Page = $matches[1] + } + + $p.Page = $(0+$($p.Page)).ToString($PageNumberFormat) + $p.PageOutputName = "$($p.BaseName)_$($p.Page)" + + [PSCustomObject]$p + } + } \ No newline at end of file diff --git a/ImageMagick/_.package.json b/ImageMagick/_.package.json new file mode 100644 index 0000000..24258c1 Binary files /dev/null and b/ImageMagick/_.package.json differ diff --git a/base/Get-HostOS.ps1 b/base/Get-HostOS.ps1 new file mode 100644 index 0000000..1258824 --- /dev/null +++ b/base/Get-HostOS.ps1 @@ -0,0 +1,77 @@ +function readOsInfoConfig{param([string]$Path) + Invoke-Expression "[ordered]@{`n$(cat $Path|% { $_ -replace '=([^"''].*[^"''])$','="$1"' }|out-string)}" +} + +$local:osInfo = [ordered]@{ + Icon = + Name = "" + OS = [Environment]::OSVersion.VersionString -replace 'Windows NT 10','Windows 10' + VER = [Environment]::OSVersion.Version.ToString() + Platform = [Environment]::OSVersion.Platform +} + +if( $osInfo.OS -eq 'Unix' ) { + if( Test-Path /etc/os-release ) { + $local:tmpInfo = readOsInfoConfig /etc/os-release + $osInfo.OS = $tmpInfo.NAME + $osInfo.VER = $tmpInfo.VERSION_ID + } elseif( Get-Command lsb_release -ErrorAction Ignore ) { + $osInfo.OS = & lsb_release -si + $osInfo.VER = & lsb_release -sr + } elseif( Test-Path /etc/lsb-release ) { + $local:tmpInfo = readOsInfoConfig /etc/os-release + $osInfo.OS = $tmpInfo.DISTRIB_ID + $osInfo.VER = $tmpInfo.DISTRIB_RELEASE + } elseif( Test-Path /etc/debian_version ) { + $osInfo.OS = "Debian" + $osInfo.VER = Get-Content /etc/debian_version + } elseif( Test-Path /etc/SuSe-release ) { + #readOsInfoConfig /etc/SuSe-release + $osInfo.OS = "" + $osInfo.VER = "" + } elseif( Test-Path /etc/redhat-release ) { + #readOsInfoConfig /etc/redhat-release + $osInfo.OS = "" + $osInfo.VER = "" + } else { + $osInfo.OS = $(unmae -s) + $osInfo.VER = $(unmae -r) + } +} elseif( $osInfo.OS -ne "MacOSX" ) { + $osInfo.OS = { + if($osInfo.OS -match "Windows 10") + { + switch ($buildnumber) + { + 10240 {"Win10 1507"} + 10586 {"Win10 1511"} + 14393 {"Win10 1607"} + 15063 {"Win10 1703"} + 16299 {"Win10 1709"} + 17134 {"Win10 1803"} + 17763 {"Win10 1809"} + 18362 {"Win10 1903"} + 18363 {"Win10 1909"} + 19041 {"Win10 20H1"} + 19042 {"Win10 20H2"} + 19043 {"Win10 21H1"} + default {"Unkown Win10"} + } + } elseif ($osInfo.OS -match "Windows Server") + { + switch ($buildnumber) + { + 3790 {$OS = "Windows Server 2003 R2"} + 6001 {$OS = "Windows Server 2008"} + 7600 {$OS = "Windows Server 2008 SP1"} + 7601 {$OS = "Windows Server 2008 R2"} + 9200 {$OS = "Windows Server 2012"} + 9600 {$OS = "Windows Server 2012 R2"} + 14393 {$OS = "Windows Server 2016"} + 17763 {$OS = "Windows Server 2019"} + } + } + Write-Host "Server system: $OS | $osversion | $buildnumber" -foregroundcolor Green + + +} \ No newline at end of file diff --git a/choco/_.package.json b/choco/_.package.json new file mode 100644 index 0000000..811afc1 Binary files /dev/null and b/choco/_.package.json differ diff --git a/choco/profile.d/autocomplete.ps1 b/choco/profile.d/autocomplete.ps1 new file mode 100644 index 0000000..995a0cd --- /dev/null +++ b/choco/profile.d/autocomplete.ps1 @@ -0,0 +1,5 @@ +# Chocolatey profile +$ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1" +if (Test-Path($ChocolateyProfile)) { + Import-Module "$ChocolateyProfile" +}