Arrays 获取无法删除打印机的内容

Arrays 获取无法删除打印机的内容,arrays,powershell,printers,Arrays,Powershell,Printers,我有大约300台非现场PC(Windows 7 PC,Powershell 1.0版-因此“删除打印机”不是一个选项),其中有许多“复制”打印机(感谢Microsoft在每次用户更改端口时制作“复制”的无限帮助),我需要删除这些打印机。我永远也不知道有多少“复制”打印机,所以到目前为止,我想出了这段代码来删除除最新打印机以外的所有打印机(无论有多少“复制”打印机)- 当我尝试运行它时,它会弹出一个带有 “命令管道位置2处的cmdlet ForEach对象-提供值…”(被切断) “进程[0]” 正

我有大约300台非现场PC(Windows 7 PC,Powershell 1.0版-因此“删除打印机”不是一个选项),其中有许多“复制”打印机(感谢Microsoft在每次用户更改端口时制作“复制”的无限帮助),我需要删除这些打印机。我永远也不知道有多少“复制”打印机,所以到目前为止,我想出了这段代码来删除除最新打印机以外的所有打印机(无论有多少“复制”打印机)-

当我尝试运行它时,它会弹出一个带有

“命令管道位置2处的cmdlet ForEach对象-提供值…”(被切断)

“进程[0]”


正在等待输入。我做错了什么?

Windows 7与PowerShell v2捆绑在一起。我注意到您正在将gwmi的输出存储在“StorePrinters.txt”中然后从CopyPrinters.txt中选择字符串,中间没有任何步骤-是否有遗漏的代码?您可以使用
Get Content lexmarkorded.txt
将整个文件加载到内存中,以计算行数,然后重新加载除最后一行以外的所有行。为什么不将它们加载到一个数组中,然后做一些事情从处理中删除最后一个元素呢?例如,
$lexmarkPrinters=Get Content CopyLexmarkPrinters.txt | Sort Object
然后
$lexmarkPrinters |选择Object-First($lexmarkPrinters.Count-1)
。老实说,我不知道你为什么要用这些文件。看起来这可能都是内存数组。山姆-我确实漏掉了我分开这个文件的那一行。在上面编辑以纠正这些错误-你是正确的。很抱歉版本2.0,但仍然没有“远程打印机”作为选项
#GET LIST OF PRINTERS
Get-WMIObject -Class Win32_Printer | Select Name > StorePrinters.txt

#GET ALL "Lexmark" PRINTERS
Select-String StorePrinters.txt -Pattern "Lexmark" | ForEach-Object {$_.Line} > CopyPrinters.txt 

#GET ALL "Lexmark Universal v2 PS3" PRINTERS
Select-String CopyPrinters.txt -Pattern "PS3" | ForEach-Object {$_.Line} > CopyLexmarkPrinters.txt 

#SORT THE Lexmark Universal v2 PS3" PRINTERS
Get-Content CopyLexmarkPrinters.txt | Sort-Object > LexmarkSorted.txt 

#GET NUMBER OF Lexmark PRINTERS, THEN DELETE ALL BUT THE MOST RECENT COPY
$LEXlines = Get-Content LexmarkSorted.txt | Measure-Object -line | Select-Object -expand Lines 

Get-Content LexmarkSorted.txt -totalcount ($LEXlines - 1) | ForEach-Object 
{
cd C:\Windows\System32\Printing_Admin_Scripts\en-US
Write-Host "cscript prnmngr.vbs -d -p `"$_`""
cmd /c "cscript prnmngr.vbs -d -p `"$_`""
cd \Support
}