我域中的一些计算机安装了不正确的PortName打印机。我有一个域上所有机器的列表,并且我可以列出端口名类似于WSD的机器上的所有打印机。
Get-Printer -ComputerName $Computer | Where PortName -like "*WSD*"但是,我希望在我的计算机列表中的每台计算机上运行这个命令,然后创建一个CSV或文本文件,其中包含有端口名称不正确的打印机的每台计算机的列表。
到目前为止,这就是我所拥有的:
$ComputerList = Get-Content "c:\Temp\Computers.CSV"
foreach ($Computer in $ComputerList) {
$WSD = Get-Printer -ComputerName $Computer | Where PortName -like "*WSD*" }我不太知道如何完成这个脚本来完成我想要的。如果我有什么不清楚的地方请告诉我。任何帮助都将不胜感激。
发布于 2018-08-15 21:00:08
首先,您应该使用.csv从Import-Csv导入数据,这样就不会遇到头文件的问题。
第二,你走在正确的轨道上,但也许可以这样做:
$ComputerList = Import-Csv -Path "c:\Temp\Computers.CSV"
$WSD = @()
foreach ($Computer in $ComputerList.<EnterHeaderNameHere>)
{
if (Get-Printer -ComputerName $Computer | Where-Object {$_.Portname -like "*WSD*"})
{
$WSD += $Computer
}
}这将检查查询的结果是否返回命中,如果返回,则会将ComputerName附加到数组$WSD。
然后,如果需要,可以使用Out-File或Export-Csv将数组转发到文件。
例如:
$WSD | Out-File -Path "c:\Temp\WSD.txt"发布于 2018-08-16 01:15:41
就像他说的,进口CSV很棒。由于get-打印机接受逗号分隔的列表(用字符串<string[]>后面的方括号表示帮助),您可能会过于简化。
$ComputerList = import-csv "c:\Temp\Computers.CSV"
$WSD = Get-Printer -ComputerName $Computerlist.name | Where {$_.PortName -like "*WSD*" }变量后面的.name只有在csv的那个列被命名为"name“时才会吐出计算机名,这样您就可以修改列表以生成标题"name”。或者修改您的代码,并将其从.name更改为任何字段的实际名称。
在这种情况下预测循环的优点是可以将命令作为作业运行。然后,当所有作业完成后,您可以将数据导出到$wsd中。但这完全是另一回事。
如果你想把它放在一个文件里,要么把
$wsd | out-file c:\temp\computerlist.txt -append或者将变量wsd从脚本中移除,然后将主命令输送到out文件中。
https://stackoverflow.com/questions/51865631
复制相似问题