Нужна небольшая помощь в завершении моего первого скриптлета Powershell ...
Я хотел бы создать единый CSV-файл для всех компьютеров XP в моем домене AD (около 3000) и записать все подключенные принтеры. В конечном итоге я хотел бы знать, сколько у нас принтеров, подключенных локально.
Мой сценарий "googled" с радостью просканирует все ПК, используя 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, а затем выполнит удаленный поиск WMI на Win32_Printer
. Как мне собрать всю эту информацию в один CSV-файл?
Вы хотите, чтобы параметр "-noClobber" для ExportCSV появился.
http://ss64.com/ps/export-csv.html
Я также сделал альтернативное решение, которое может сработать:
# 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