Advertisement
Guest User

Printer-Migration.ps1

a guest
Jun 25th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. # Printer-Migration.ps1
  2. #
  3. # Author: Chris Coukos
  4. #
  5. # Required variables
  6. $NewServer = "\\srv-fs-01"
  7. $OldServer = "\\srv-dc-01"
  8. $Path = "$env:APPDATA\DefaultPrinter.txt"
  9.  
  10. # Script variables
  11. $Server = [string[]]$OldServer -replace "\\\\"
  12. $Path = "$env:APPDATA\DefaultPrinter.txt"
  13. $DefaultPrinter = Get-WmiObject -Query " SELECT * FROM Win32_Printer WHERE Default=$true"
  14. $DefaultPrinterName = ($DefaultPrinter).name
  15. $OldDefaultServer = ($DefaultPrinter).SystemName
  16. $DefaultPrinter = try {$DefaultPrinter | Select-Object -expandproperty ShareName} catch { "Default printer is not a network printer" }
  17.  
  18. cls
  19. if (!(Test-Path $Path)) {
  20. $DefaultPrinter | Out-File -FilePath $path -Force -Encoding "ASCII"
  21. Write-Host "$DefaultPrinterName written to $path"
  22. }
  23. else {
  24. Write-Host "Existing default printer file found"
  25. }
  26. If ($OldDefaultServer -ne $env:computername) {
  27. Write-Host "Network default printer found"
  28. }
  29. else {
  30. $DefaultPrinter = Get-WmiObject -Query " SELECT * FROM Win32_Printer WHERE Default=$true" | select-object -expand name
  31. $DefaultPrinter | Out-File -FilePath $path -Force -Encoding "ASCII"
  32. Write-Host "Default printer: $DefaultPrinter"
  33.  
  34. }
  35. # Read text file and set new default printer
  36. $DefaultPrinter = Get-Content $path -TotalCount 1
  37. $Printers = Get-WMIObject -Class Win32_Printer
  38. #$SharedPrinters = ($Printers).name -like "\\$OldServer*"
  39. $SharedPrinters = $Printers | Select-Object -ExpandProperty name
  40. $SharedPrinters = [string[]]$sharedprinters -like "$OldServer*"
  41. $PrinterNames = [string[]]$sharedprinters -replace "\\\\srv-dc-01\\"
  42. #$PrinterNames = $SharedPrinters | % { $_.substring(12) }
  43. #$OldPrinters = [string[]]$sharedprinters -like "$OldServer\*"
  44. #$NewPrinters = [string[]]$Sharedprinters -like "$NewServer\*"
  45. #$OldPrinters = $OldPrinters | foreach {$_.ShareName}
  46. #$Printers = $OldPrinters.substring(12)
  47.  
  48. # Add new printers
  49. Write-Host "Adding new shared printers..."
  50. If (Test-Connection "$server" -count 2 -quiet) {
  51. foreach ($printer in $PrinterNames) {
  52. (New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("$NewServer\$Printer")
  53. #add-printer -connectionname "$newserver\$printer"
  54. # PSv2.0 Get-WmiObject -Class Win32_Printer | where{$_.SystemName -eq '\\$OldServer'}| foreach{$_.delete()}
  55. # PSv3+ remove-printer "$OldServer\$printer"
  56. }
  57. }
  58. else {
  59. Write-Host "Unable to contact server to add new printers"
  60. Exit
  61. }
  62. # Check if a new default printer was set
  63. Write-Host "Setting new default printer..."
  64. If (($OldDefaultServer -ne $env:computername) -or ($OldDefaultServer -ne $null)){
  65. try {(New-Object -ComObject WScript.Network).SetDefaultPrinter("$NewServer\$DefaultPrinter")} catch { "No new shared printer found"
  66. break
  67. }
  68. } else {
  69. $DefaultPrinter = "No default printer change was made"
  70. Write-Host $DefaultPrinter
  71. Exit
  72. }
  73. # Check current default printer
  74. $NewDefaultServer = Get-WmiObject -Query " SELECT * FROM Win32_Printer WHERE Default=$true" | Select-Object -ExpandProperty SystemName
  75.  
  76. If ($NewDefaultServer -eq $NewServer) {
  77. Write-Host "Default Printer was properly set to $NewDefaultServer\$DefaultPrinter"
  78. } else {
  79. Write-Host Unable to change default printer
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement