Powershell - Gera o CSV de todas as impressoras conectadas localmente em todos os PCs em um domínio

1

Preciso de um pouco de ajuda para terminar meu primeiro scriptlet Powershell ...

Eu gostaria de criar um único arquivo CSV de todos os PCs do XP no meu domínio do AD (aproximadamente 3.000) e gravar todas as impressoras conectadas. Por fim, gostaria de saber quantas impressoras temos conectadas localmente.

O meu script "Googled" juntos escaneia todos os PCs usando o WMI para as impressoras e exibe na tela os resultados. No entanto, parece que não consigo refatorar o código para gerar os resultados para CSV (via Export-CSV ) que não vai apenas sobrescrever o arquivo. Eu quero anexá-lo ao arquivo.

# 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???
    }

O script, tal como está, fará a varredura do AD para todos os PCs do XP e, em seguida, executará uma pesquisa remota do WMI em Win32_Printer . Como faço para obter todas essas informações em um único arquivo CSV?

    
por Guy 07.08.2009 / 10:34

1 resposta

2

Você quer que a opção "-noClobber" seja exibida no ExportCSV.

link

Eu também fiz uma solução alternativa que pode funcionar:

# 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
    
por 07.08.2009 / 15:42