![скрипт powershell для удаления общих принтеров, если они существуют](https://rvso.com/image/789283/%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20powershell%20%D0%B4%D0%BB%D1%8F%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%D0%B1%D1%89%D0%B8%D1%85%20%D0%BF%D1%80%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BE%D0%B2%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BE%D0%BD%D0%B8%20%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%82.png)
Извините, ребята, за вопрос, но мне нужна помощь. У меня есть несколько принтеров, установленных на многих компьютерах, таких как \server\printer. Я думал удалить их с помощью скрипта powershell, но не могу этого сделать. Я думал о чем-то вроде этого:
$printers=Get-Printer | where { $_.Type -eq 'Connection'} | select name /* this part show me only \\server\printers */
$printers | ForEach-Object {
if ($printers) {
Remove-Printer -Name $printers -Confirm:$false
}
}
Заранее всем спасибо.
решение1
Это потому, что вы предоставляете весь список принтеров командлету Remove-Printer. Вам нужно предоставить один принтер за раз.
[...]
Remove-Printer -Name $printers -Confirm:$false
# Error here------------/\
[...]
Вы находитесь внутри цикла foreach, вы можете получить текущий принтер, используя $PSItem
или короткий псевдоним $_
.
$PSItem
(и $_
) означает «текущий объект в цикле ForEach»
Это должно сработать:
$printers=Get-Printer | where { $_.Type -eq 'Connection'} | select name /* this part show me only \\server\printers */
$printers | ForEach-Object {
if ($_) {
Remove-Printer -Name $_.Name -Confirm:$false
}
}