I am Trying to make a Simple Gui for a script I wrote for others on my Team.
long story shot the code goes stops the service, deletes the files then restarts the service.
Here is the Code
# Test Error 49 Toolbox
#region Boring beginning stuff
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
#endregion
#region begin to draw forms
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Error49 Clearing Tool"
$Form.Size = New-Object System.Drawing.Size(300,170)
$Form.StartPosition = "CenterScreen"
$Form.KeyPreview = $True
$Form.MaximumSize = $Form.Size
$Form.MinimumSize = $Form.Size
$label = New-Object System.Windows.Forms.label
$label.Location = New-Object System.Drawing.Size(5,5)
$label.Size = New-Object System.Drawing.Size(240,30)
$label.Text = "Type in the results of the BTI print Job scan from the MS Toolbox"
$Form.Controls.Add($label)
$textbox = New-Object System.Windows.Forms.TextBox
$textbox.Location = New-Object System.Drawing.Size(5,40)
$textbox.Size = New-Object System.Drawing.Size(120,20)
#$textbox.Text = "Select source PC:"
$Form.Controls.Add($textbox)
$Scan_computer_click =
{
#region Actual Code
$statusBar1.Text = "Clearing Print Jobs..."
[String[]]$ComputerName = $textbox.Text
#Beging ForEach Loop
foreach ($Computer in $Computername)
{
Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Displayname "Citrix Print Manager Service"}
Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Name spooler -force}
Remove-Item -Path \\$Computer\c$\Windows\System32\spool\PRINTERS\* -recurse
Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Displayname "Citrix Print Manager Service"}
Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Name spooler}
Get-Service -Computername $Computer -Displayname "Citrix Print Manager Service", "Print Spooler" | Select name,status,$Computer | sort $Computer | Out-GridView
} #End For each Loop
$statusBar1.Text = "Print Jobs Cleared"
#endregion
}
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(140,38)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click($Scan_computer_click)
$Form.Controls.Add($OKButton)
$result_label = New-Object System.Windows.Forms.label
$result_label.Location = New-Object System.Drawing.Size(5,65)
$result_label.Size = New-Object System.Drawing.Size(240,30)
$result_label.Text = $OutPut
$Form.Controls.Add($result_label)
$statusBar1 = New-Object System.Windows.Forms.StatusBar
$statusBar1.Name = "statusBar1"
$statusBar1.Text = "Ready..."
$form.Controls.Add($statusBar1)
$Form.Add_KeyDown({if ($_.KeyCode -eq "Enter"){& $Scan_computer_click}})
$Form.Add_KeyDown({if ($_.KeyCode -eq "Escape")
{$Form.Close()}})
#endregion begin to draw forms
#Show form
$Form.Topmost = $True
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()
The above code works Just fine for a Single hostname, but when trying to input more then one at a time I get the following error
Invoke-Command : One or more computer names is not valid. If you are trying to pass a Uri, use the -ConnectionUri parameter or pass Uri objects instead of strings.
At C:\Scripts\Building\Test49Box_AlphaTest.ps1:41 char:23
-
Invoke-Command <<<< -computername $Computer -ScriptBlock {Stop-Service -Displayname "Citrix Print Manager Service"}- CategoryInfo : InvalidArgument: (System.String:String) [Invoke-Command], ArgumentException
- FullyQualifiedErrorId : PSSessionInvalidComputerName,Microsoft.PowerShell.Commands.InvokeCommandCommand
I know the Code that runs the Foreach loop works as i have it working already in a different script, and adding [String] in front of computername did not seem to help either.
is this an issue with Powershell or with the Forms them self ?
update: I tried to add in [String]$Computername = [String]$Textbox.txt and it now seems to read the string, only now it reads it as a Single Stringinstead of an separate entries in an array.