Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <#
- .Synopsis
- Script to change printer IP address
- .Description
- This script changes printer IP address
- It leaves a log file in the current folder that lists script progress
- .Parameter OldIP
- Example: 192.168.0.99
- .Parameter NewIP
- Example: 192.168.0.95
- .Example
- .\Change-PrinterIP.ps1 192.168.0.99 192.168.0.95
- This example changes the printer attached to the print port with IP 192.168.0.99
- It creates a new printer port with same settings as the old 192.168.0.99 printer port,
- assigns the printer to the new port, and deletes the old printer port
- .Link
- https://superwidgets.wordpress.com/category/powershell/
- .Notes
- v1.0 - 07/27/2014
- #>
- #==============================================================================
- # Script Name: Change-PrinterIP.ps1
- # DATE: 07/27/2014
- # Version: 1.0
- # COMMENT: Script to change printer IP address
- #==============================================================================
- #
- [CmdletBinding()]
- param(
- [Parameter (ParameterSetName="p1",Mandatory=$true,Position=0,HelpMessage="Printer's old IP: ")][String]$OldIP,
- [Parameter (ParameterSetName="p1",Mandatory=$true,Position=1,HelpMessage="Printer's new IP: ")][String]$NewIP,
- [Parameter ()][array]$ComputerName = $env:COMPUTERNAME,
- [Parameter ()][switch]$RemovePort = $false,
- [Parameter ()][string]$PortPrefix,
- [Parameter (ParameterSetName="p2",HelpMessage="CSV file with 'NewIP' and 'OldIP' columns.")][string]$List = ".\printerports.csv"
- )
- #
- # Log function
- function Log {
- [CmdletBinding()]
- param(
- [Parameter (Mandatory=$true,Position=1,HelpMessage="String to be saved to log file and displayed to screen: ")][String]$String,
- [Parameter (Mandatory=$false,Position=2)][String]$Color = "White",
- [Parameter (Mandatory=$false,Position=3)][String]$Logfile = "\logs" + $myinvocation.mycommand.Name.Split(".")[0] + "_" + (Get-Date -format yyyyMMdd_hhmmsstt) + ".txt"
- )
- write-host $String -foregroundcolor $Color
- ((Get-Date -format "yyyy.MM.dd hh:mm:ss tt") + ": " + $String) | out-file -Filepath $Logfile -append
- }
- function Create-PrinterPort {
- param(
- [Parameter ()][String]$NewIP,
- [Parameter ()][string]$ComputerName
- )
- $printerip =$NewIP
- $port = ([WMICLASS]"\\$ComputerName\ROOT\cimv2:Win32_TCPIPPrinterPort”).createInstance()
- $port.Name = "$NewIP"
- $port.SNMPEnabled=$false
- $port.Protocol=1
- $port.HostAddress=$NewIP
- $port.Put()
- #$port
- }
- ForEach ($computer in $ComputerName) {
- If (($OldIP) -and ($NewIP)) {
- $PrinterPorts = New-Object -TypeName PSObject
- $PrinterPorts | Add-Member -Name oldIP -Value $OldIP -MemberType NoteProperty
- $PrinterPorts | Add-Member -Name newIP -Value $NewIP -MemberType NoteProperty
- Write-Output -Verbose "Processing individual port $($PrinterPorts.oldIP)"
- }
- Else {
- Write-Output -Verbose "Processing list '$List'"
- $PrinterPorts = Import-Csv $List
- }
- ForEach ($Port in $PrinterPorts){
- $LogFile = (Get-Location).path + "\Change-PrinterIP_" + $Computer + (Get-Date -format yyyyMMdd_hhmmsstt) + ".txt"
- $PortInfo = Get-PrinterPort -Name "$($PortPrefix)$($Port.oldip)" -ComputerName $Computer
- if (!$PortInfo) {
- Write-Output -Verbose "Port $($PortPrefix)$($Port.oldip) not found on $Computer"
- }
- else {
- $Printers = Get-Printer -ComputerName $Computer | Where-Object { $_.PortName -match "$($PortPrefix)$($Port.OldIP)"}
- log "Old printer port:" Cyan $LogFile
- log (" Protocol: " + $PortInfo.Protocol) Cyan $LogFile
- log (" Description: " + $PortInfo.Description) Cyan $LogFile
- log (" Name: " + $PortInfo.Name) Cyan $LogFile
- log (" Port Number: " + $PortInfo.PortNumber) Cyan $LogFile
- log (" PrinterHostAddress: " + $PortInfo.PrinterHostAddress) Cyan $LogFile
- log (" Associated Printer: " + $Printers.name) Cyan $Logfile
- #(Get-Printer -ComputerName $Computer | Where-Object { $_.PortName -match "$($PortPrefix)$($Port.OldIP)" }).PortName) Cyan $LogFile
- # Create new printer port
- Create-PrinterPort -ComputerName $Computer -NewIP $Port.NewIP
- #
- # Assign new printer port to the printer
- $PrinterName = Get-Printer -ComputerName $Computer | Where-Object { $_.PortName -match "$($PortPrefix)$($Port.OldIP)" }
- Get-Printer -ComputerName $Computer | Where-Object { $_.PortName -match "$($PortPrefix)$($Port.OldIP)" } | Set-Printer -ComputerName $Computer -PortName "$($Port.NewIP)"
- #
- If ($RemovePort) {
- write-output "Removing port..."
- Remove-PrinterPort -Name "$($PortPrefix)$($Port.OldIP)" -ComputerName $Computer
- }
- $PortInfo = Get-PrinterPort -Name "$($Port.NewIP)" -ComputerName $Computer
- log "New printer port:" Green $LogFile
- log (" Protocol: " + $PortInfo.Protocol) Green $LogFile
- log (" Description: " + $PortInfo.Description) Green $LogFile
- log (" Name: " + $PortInfo.Name) Green $LogFile
- log (" Port Number: " + $PortInfo.PortNumber) Green $LogFile
- log (" PrinterHostAddress: " + $PortInfo.PrinterHostAddress) Green $LogFile
- log ("Printer $($PrinterName.name) is now attached to printer port: " + (Get-Printer -ComputerName $Computer | Where-Object { $_.PortName -like "$($Port.NewIP)" }).PortName) Green $LogFile
- Set-Printer -ComputerName $Computer -Name $PrinterName.name -Comment $($Port.NewIP)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement