Назад | Перейти на главную страницу

Powershell - создание CSV для всех локально подключенных принтеров на всех ПК в домене.

Нужна небольшая помощь в завершении моего первого скриптлета 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