Как преобразовать значения в ToUpper из значений в Get-WMIObject Win32_Printer

Попытка написать сценарий для удаления всех сетевых принтеров из системы, но оставить другие принтеры / факсы в покое.

$Printer = Get-WMIObject Win32_Printer | Select-Object ServerName, ShareName 

чтобы получить значения для $Printer но не может заставить это измениться в верхний регистр.@{ServerName=\\HBMN-Vbranch; ShareName=HBMN-P5} возвращается, но я пытаюсь сделать if ($Printer -Like "*\\HBMN-VBRANCH*") и он никогда не находит строчные или смешанные буквы.

Если я попытаюсь сделать $($Printer.ToString().ToUpper()) значение не возвращается. Если я попробую $Printer.ToUpper() метод не найден.

2 ответа

.toUpper() это метод для строк. Так что конвертируйте этот вывод в строку, используя out-string:

($printer.SystemName|out-string).toUpper()

Призвание ToString() на $Printer не преобразует пользовательский объект (PSCustomObject) в строку, это ваша основная проблема. Это должно работать:

$Printer.ServerName.ToUpper()

Но если вам не нужно имя общего ресурса в пользовательском объекте, просто получите имя сервера в виде строки:

$serverName = Get-WMIObject Win32_Printer | Select-Object -ExpandProperty ServerName

Кроме того, ваше сравнение должно использовать имя сервера, а не $Printer объект:

if ($Printer.ServerName -like "*HBMN-VBRANCH*") 
Другие вопросы по тегам