Я работаю над формой Windows, используя Powershell, который будет запрашивать сервер печати для всех установленных принтеров (функция: FetchPrinters). У меня есть кнопка, добавленная для запуска функции FetchPrinters.
Function:
$Global:PrintServer = ""
function FetchPrinters {
$printerTxtFileLocation = 'C:\Temp\PrinterList.csv'
$outputBox.text = "Fetching list of printers on $Global:PrintServer"
# $Global:PrintServer = $Global:DropDownBox1.SelectedItem.ToString()
Get-Printer -ComputerName "$Global:PrintServer" | Select-Object -ExpandProperty Name | Sort-Object -CaseSensitive | Out-File -Force -Encoding utf8 -FilePath "$printerTxtFileLocation"
$PrinterList = Get-Content -Path "$printerTxtFileLocation" -Encoding UTF8 -Force
foreach ($Printer in $PrinterList) {
$DropDownBox2.ResetText()
[void] $DropDownBox2.Items.Add($Printer)
}
}
В Dropdownbox1 будет список сайтов (местоположение), которые при выборе будут определять, какой сервер печати будет запрашивать.
$DropDownBox1 = New-Object System.Windows.Forms.ComboBox
$DropDownBox1.Text = "Select Site Name"
$DropDownBox1.Size = New-Object System.Drawing.Size(190, 20)
$DropDownBox1.Location = New-Object System.Drawing.Point(20, 20)
$Sites = @(
'Site 1',
'Site 2',
'Site 3',
'Site 4',
'Site 5',
'Site 6'
'Site 7'
)
ForEach ($Site in $Sites) {
$DropDownBox1.Items.Add($Site) | Out-Null
}
$Global:DropDownBox1_SelectedIndexChanged = {
Switch ($DropDownBox1.Text) {
'Site 1' { $Global:PrintServer = "\\Printserver1" }
'Site 2' { $PrintServer = "\\Printserver2" }
'Site 3' { $PrintServer = "\\Printserver3" }
'Site 4' { $PrintServer = "\\Printserver3" }
'Site 5' { $PrintServer = "\\Printserver4" }
'Site 6' { $PrintServer = "\\Printserver5" }
'Site 7' { $PrintServer = "\\Printserver6" }
}
}
$DropDownBox1.add_SelectedIndexChanged($Global:DropDownBox1_SelectedIndexChanged)
$Form.Controls.Add($DropDownBox1)
В Dropdownbox2 будет список доступных для установки принтеров
$DropDownBox2 = New-Object System.Windows.Forms.ComboBox
$DropDownBox2.Text = "Select the Printer to install"
$DropDownBox2.Location = New-Object System.Drawing.Size(20, 60)
$DropDownBox2.Size = New-Object System.Drawing.Size(180, 20)
$DropDownBox2.DropDownHeight = 200
$DropDownBox2.add_SelectedIndexChanged({ })
$Form.Controls.Add($DropDownBox2)
Как есть, все работает нормально, я могу выбрать сайт в Drowndownbox1, нажать кнопку «Принять принтеры», Dropdownbox2 показывает доступные принтеры для этого сайта.
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь выбрать другой сайт (в той же форме) и нажимаю кнопку «Принтеры извлечения», переменная $ Printers сохраняет свои старые данные, которые выглядят как Таким образом, Dropdownbox2 содержит принтеры из предыдущего запроса и текущий.
В идеале, когда я выбираю сайт, нажимаю на выбор принтеров, dropdownbox2 содержит информацию только для этого сайта.
Я пробовал с помощью командлета Clear-Variable, но, похоже, он не работает, но также возможно, что я делаю что-то не так, а не думать об этом правильно.
любая помощь очень ценится.