I have just starting trying to teach myself Powershell and I am trying to write a script to use at work to install network printers. The script does work in that the printer is installed but it hangs at the add_printer stage before the $outputBox.text= “Printer with port $var installed” line. The printer is installed but the box never goes away and I have to kill Powershell ISE to get rid of it.
Is there a way to end the install line to get it to move on ?
Many thanks,
Ian
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(600,400)
############################################## Start functions
function addprinter {
$var=$InputBox.text;
pnputil.exe -a “D:\Powershell\Printer\pcl6-x64\hpbuio170l.inf” #get driver
add-PrinterDriver -name “hp universal printing pcl 6” #install driver
Add-PrinterPort -Name $var -printerhostaddress $var
add-printer -name “HP LJ 400 $var” -portname $var -drivername “hp universal printing pcl 6”
$outputBox.text= “Printer with port $var installed”
} #end addprinter
############################################## end functions
############################################## Start text fields
$InputBox = New-Object System.Windows.Forms.TextBox
$InputBox.Location = New-Object System.Drawing.Size(20,100)
$InputBox.Size = New-Object System.Drawing.Size(150,20)
$Form.Controls.Add($InputBox)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,50)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = “Please enter the information in the space below:”
$Form.Controls.Add($objLabel)
$outputBox = New-Object System.Windows.Forms.TextBox
$outputBox.Location = New-Object System.Drawing.Size(10,150)
$outputBox.Size = New-Object System.Drawing.Size(565,200)
$outputBox.MultiLine = $True
$outputBox.ScrollBars = “Vertical”
$Form.Controls.Add($outputBox)
############################################## end text fields
############################################## Start buttons
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(400,30)
$Button.Size = New-Object System.Drawing.Size(75,50)
$Button.Text = “Install”
$Button.Add_Click({addprinter})
$Form.Controls.Add($Button)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(400,80)
$CancelButton.Size = New-Object System.Drawing.Size(75,50)
$CancelButton.Text = “Cancel”
$CancelButton.Add_Click({$Form.Close()})
$Form.Controls.Add($CancelButton)
############################################## end buttons
$Form.StartPosition = “CenterScreen”
$Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedToolWindow
$Form.Text = “Install Printer by Hostname”
$Form.Topmost = $True
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()
PS. this very much a work in progress so I will be adding in some checks to get rid of errors when port is already present etc.