This repository has been archived on 2024-09-06. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
win_configscripts/lib/ManagePrinter.psm1
2021-01-31 22:36:14 +01:00

86 lines
2.5 KiB
PowerShell

# Manage printers
function Get-CurrentPrinterDriverVersion {
param (
[Parameter(Mandatory=$true)][string]$DriverName
)
$printer = Get-PrinterDriver -Name $DriverName
if ( $printer -eq $false ) {
return $false
}
$version = $printer.DriverVersion
return ( 3..0 | foreach-object {( $version -shr ($_ * 16)) -band 0xffff }) -join'.'
}
Function Add-NetworkPrinterPort {
param (
[Parameter(Mandatory=$true)][string]$Ip,
[Parameter(Mandatory=$true)][string]$Name
)
if ( $(Get-PrinterPort | Where PrinterHostAddress -eq $Ip) ) {
Write-Host -ForegroundColor Cyan "This driver version is already installed"
}
else {
Try {
Add-PrinterPort -Name $Name -PrinterHostAddress $Ip
}
Catch {
Throw $($PSItem.ToString())
}
}
}
function Install-PrinterDriver {
param (
[Parameter(Mandatory=$true)][string]$Inf,
[Parameter(Mandatory=$true)] [string]$Name
)
if ( -Not (Test-Path $Inf -EA SilentlyContinue) ) {
Throw [System.IO.FileNotFoundException]::new("Driver file $Inf not found")
}
if ( Get-PrinterDriver -Name $Name -EA SilentlyContinue ) {
Write-Warning "Printer $Nam e already exist"
# Compare version
$current_version = Get-CurrentPrinterDriverVersion $Name
$inf_version = $(((Select-String -Pattern "DriverVer" -path $Inf) -split ',')[1])
if ($inf_version -eq $current_version) {
Write-Host -ForegroundColor Cyan "This driver version is already installed"
return
}
}
Try {
pnputil /add-driver $Inf /install | Out-Null
Add-PrinterDriver -Name $Name -EA Stop
}
Catch [Microsoft.Management.Infrastructure.CimException] {
Throw $($PSItem.ToString())
}
Catch {
Throw "Error when Adding $Name from $Inf in Windows Driver Store"
}
}
Function Add-NetworkPrinter () {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)][string]$Inf,
[Parameter(Mandatory=$true)][string]$Ip,
[Parameter(Mandatory=$true)][string]$Driver,
[Parameter(Mandatory=$true)][string]$PrinterName,
[Parameter(Mandatory=$false)][string]$PortPrefix=""
)
$PortName = "$PortPrefix$Ip"
Try {
Install-PrinterDriver $Inf $Driver
Add-NetworkPrinterPort $Ip $PortName
Add-Printer -DriverName $Driver -Name $PrinterName -PortName $PortName -EA Stop
}
Catch {
Throw "Error in Add-NetworkPrinter: $($Error[0].ToString())"
}
}