Powershell – 在域中的所有PC上生成所有本地打印机的CSV

需要一点帮助完成我的第一个PowerShell脚本…

我想在我的AD域(约3,000)上创build一个包含所有XP PC的单个CSV文件,并logging所有连接的打印机。 最终,我想知道我们有多less个本地连接的打印机。

我的“谷歌search”脚本将愉快地扫描所有的PC使用WMI的打印机和结果输出到屏幕上。 但是,我似乎无法重构代码输出结果到CSV(通过Export-CSV ),不会只是覆盖文件。 我想要它追加到文件。

 # Get the list of computer names from AD $strCategory = "computer" $objDomain = New-Object System.DirectoryServices.DirectoryEntry $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = $objDomain $objSearcher.CacheResults = -1 $objSearcher.PageSize = 5000 $objSearcher.SizeLimit = 5000 $objSearcher.Filter = ("(&(operatingSystemVersion=5*)(objectCategory=$strCategory)(operatingSystem=Windows XP*))") $wmiPrinterClass = "win32_printer" $colProplist = "name" foreach ($i in $colPropList) {$objSearcher.PropertiesToLoad.Add($i)} $colResults = $objSearcher.FindAll() $colResults.count # for each computer, use WMI to scan for printers foreach ($objComputer in $colResults) { $machine = $objComputer.Properties.name $machine get-WmiObject -class $wmiPrinterClass -computername $machine | ` ft systemName, name, shareName, Local -auto | ` Export-CSV "c:\printers.csv" #<<< HOW DO I STOP THIS FROM OVERWRITING??? } 

这个脚本将会扫描AD所有的XP PC,然后在Win32_Printer上执行远程WMIsearch。 如何将所有这些信息整合到一个CSV文件中?

你想要“-noClobber”选项ExportCSV出现。

http://ss64.com/ps/export-csv.html

我也做了一个可能的解决scheme:

 # Get the list of computer names from AD $objDomain = New-Object System.DirectoryServices.DirectoryEntry $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = $objDomain $objSearcher.CacheResults = -1 $objSearcher.PageSize = 5000 $objSearcher.SizeLimit = 5000 $objSearcher.PropertiesToLoad.Add("name") $objSearcher.Filter = ("(&(operatingSystemVersion=5*)(objectCategory=computer)(operatingSystem=Windows XP*))") $output = @() # for each computer, use WMI to scan for printers foreach ($objComputer in $objSearcher.FindAll()) { $output += get-WmiObject -class "win32_printer" -computername $objComputer.Properties.name | ft systemName, name, shareName, Local -auto } Export-CSV "c:\printers.csv" -inputObject $output