none
Аудит принтеров или формирование списка принтеров RRS feed

  • Вопрос

  • Подскажите, что необходимо добавить, что бы скрипт импортировал перечень компьютеров и выполнял действия для каждого компьютера 

    # Print server inventory script
    # Created by Michel Stevelmans - http://www.michelstevelmans.com
    
    # Set print server name
    $Printserver = 
    
    # Create new Excel workbook
    $Excel = new-Object -comobject Excel.Application
    $Excel.visible = $True
    $Excel = $Excel.Workbooks.Add()
    $Sheet = $Excel.Worksheets.Item(1)
    $Sheet.Cells.Item(1,1) = "Printer Name"
    $Sheet.Cells.Item(1,2) = "Location"
    $Sheet.Cells.Item(1,3) = "Comment"
    $Sheet.Cells.Item(1,4) = "IP Address"
    $Sheet.Cells.Item(1,5) = "Driver Name"
    $Sheet.Cells.Item(1,6) = "Shared"
    $Sheet.Cells.Item(1,7) = "Share Name"
    $Sheet.Cells.Item(1,8) = "Computername"
    $intRow = 2
    $WorkBook = $Sheet.UsedRange
    $WorkBook.Font.Bold = $True
    
    # Get printer information
    $Printers = Get-WMIObject Win32_Printer -computername $Printserver
    $computername = Get-WMIObject Win32_ComputerSystem -computername $Printserver
    foreach ($Printer in $Printers)
    {
        $Sheet.Cells.Item($intRow, 1) = $Printer.Name
        $Sheet.Cells.Item($intRow, 2) = $Printer.Location
        $Sheet.Cells.Item($intRow, 3) = $Printer.Comment
        $Ports = Get-WmiObject Win32_TcpIpPrinterPort -computername $Printserver
            foreach ($Port in $Ports)
            {
                if ($Port.Name -eq $Printer.PortName)
                {
                $Sheet.Cells.Item($intRow, 4) = $Port.HostAddress
                }
            }
        $Sheet.Cells.Item($intRow, 5) = $Printer.DriverName
        $Sheet.Cells.Item($intRow, 6) = $Printer.Shared
        $Sheet.Cells.Item($intRow, 7) = $Printer.ShareName
    	$Sheet.Cells.Item($intRow, 8) = $computername.DNSHostName
        $intRow = $intRow + 1
    }
    

    13 апреля 2012 г. 12:18

Ответы

  • $computers = Get-Content C:\computerlist.txt
    
    foreach($computer in $computers)
    {
    	$Printers = Get-WMIObject Win32_Printer -computername $computer
    	$computername = Get-WMIObject Win32_ComputerSystem -computername $computer
    	foreach ($Printer in $Printers)
    	{
    	    $Sheet.Cells.Item($intRow, 1) = $Printer.Name
    	    $Sheet.Cells.Item($intRow, 2) = $Printer.Location
    	    $Sheet.Cells.Item($intRow, 3) = $Printer.Comment
    	    $Ports = Get-WmiObject Win32_TcpIpPrinterPort -computername $computer
    	        foreach ($Port in $Ports)
    	        {
    	            if ($Port.Name -eq $Printer.PortName)
    	            {
    	            $Sheet.Cells.Item($intRow, 4) = $Port.HostAddress
    	            }
    	        }
    	    $Sheet.Cells.Item($intRow, 5) = $Printer.DriverName
    	    $Sheet.Cells.Item($intRow, 6) = $Printer.Shared
    	    $Sheet.Cells.Item($intRow, 7) = $Printer.ShareName
    		$Sheet.Cells.Item($intRow, 8) = $computername.DNSHostName
    	    $intRow = $intRow + 1
    	}
    } 
    $Printserver =  - Эту строчку удалить
    • Помечено в качестве ответа KazunEditor 27 апреля 2012 г. 10:55
    13 апреля 2012 г. 13:58
    Отвечающий
  • Вместо $.DNSHostName наверное надо $Printer.DNSHostName


    Сазонов Илья http://isazonov.wordpress.com/

    Да, по видимости не в этом дело

    $ = Get-WMIObject Win32_ComputerSystem - $computer

    $Sheet.Cells.Item($intRow, 8) = $.DNSHostName

    Скрипт скопирован с кучей ошибок,что я привел.

    Должно быть не - $Computer ,а -ComputerName $computer

    $Sheet.Cells.Item($intRow, 8) = $computername.DNSHostName

    • Помечено в качестве ответа Denis.Pasternak 7 мая 2012 г. 11:56
    18 апреля 2012 г. 7:36
    Отвечающий

Все ответы

  • $computers = Get-Content C:\computerlist.txt
    
    foreach($computer in $computers)
    {
    	$Printers = Get-WMIObject Win32_Printer -computername $computer
    	$computername = Get-WMIObject Win32_ComputerSystem -computername $computer
    	foreach ($Printer in $Printers)
    	{
    	    $Sheet.Cells.Item($intRow, 1) = $Printer.Name
    	    $Sheet.Cells.Item($intRow, 2) = $Printer.Location
    	    $Sheet.Cells.Item($intRow, 3) = $Printer.Comment
    	    $Ports = Get-WmiObject Win32_TcpIpPrinterPort -computername $computer
    	        foreach ($Port in $Ports)
    	        {
    	            if ($Port.Name -eq $Printer.PortName)
    	            {
    	            $Sheet.Cells.Item($intRow, 4) = $Port.HostAddress
    	            }
    	        }
    	    $Sheet.Cells.Item($intRow, 5) = $Printer.DriverName
    	    $Sheet.Cells.Item($intRow, 6) = $Printer.Shared
    	    $Sheet.Cells.Item($intRow, 7) = $Printer.ShareName
    		$Sheet.Cells.Item($intRow, 8) = $computername.DNSHostName
    	    $intRow = $intRow + 1
    	}
    } 
    $Printserver =  - Эту строчку удалить
    • Помечено в качестве ответа KazunEditor 27 апреля 2012 г. 10:55
    13 апреля 2012 г. 13:58
    Отвечающий
  • Спасибо огромное. Но как то он сразу отработал, но затем:

    Имя "$.DNSHostName" не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильно
    сть написания имени, а также наличие и правильность пути, после чего повторите попытку.
    C:\Users\TEMP\AppData\Local\Temp\fa3ef507-265b-4afa-8649-fdb65668c2b5.ps1:45 знак:48
    +         $Sheet.Cells.Item($intRow, 8) = $.DNSHostName <<<< 
        + CategoryInfo          : ObjectNotFound: ($.DNSHostName:String) [], CommandNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException

    Скрипт так выглядит:

    $computers = Get-Content P:\pr.txt
    
    
    $Excel = new-Object -comobject Excel.Application
    $Excel.visible = $True
    $Excel = $Excel.Workbooks.Add()
    $Sheet = $Excel.Worksheets.Item(1)
    $Sheet.Cells.Item(1,1) = "Printer Name"
    $Sheet.Cells.Item(1,2) = "Location"
    $Sheet.Cells.Item(1,3) = "Comment"
    $Sheet.Cells.Item(1,4) = "IP Address"
    $Sheet.Cells.Item(1,5) = "Driver Name"
    $Sheet.Cells.Item(1,6) = "Shared"
    $Sheet.Cells.Item(1,7) = "Share Name"
    $Sheet.Cells.Item(1,8) = ""
    $intRow = 2
    $WorkBook = $Sheet.UsedRange
    $WorkBook.Font.Bold = $True
    
    
    foreach($computer in $computers)
    {
    	$Printers = Get-WMIObject Win32_Printer - $computer
    	$ = Get-WMIObject Win32_ComputerSystem - $computer
    	foreach ($Printer in $Printers)
    	{
    	    $Sheet.Cells.Item($intRow, 1) = $Printer.Name
    	    $Sheet.Cells.Item($intRow, 2) = $Printer.Location
    	    $Sheet.Cells.Item($intRow, 3) = $Printer.Comment
    	    $Ports = Get-WmiObject Win32_TcpIpPrinterPort - $computer
    	        foreach ($Port in $Ports)
    	        {
    	            if ($Port.Name -eq $Printer.PortName)
    	            {
    	            $Sheet.Cells.Item($intRow, 4) = $Port.HostAddress
    	            }
    	        }
    	    $Sheet.Cells.Item($intRow, 5) = $Printer.DriverName
    	    $Sheet.Cells.Item($intRow, 6) = $Printer.Shared
    	    $Sheet.Cells.Item($intRow, 7) = $Printer.ShareName
    		$Sheet.Cells.Item($intRow, 8) = $.DNSHostName
    	    $intRow = $intRow + 1
    	}
    } 


    18 апреля 2012 г. 5:49
  • Вместо $.DNSHostName наверное надо $Printer.DNSHostName

    Сазонов Илья http://isazonov.wordpress.com/

    18 апреля 2012 г. 6:00
    Модератор
  • Вместо $.DNSHostName наверное надо $Printer.DNSHostName

    Сазонов Илья http://isazonov.wordpress.com/

    Да, по видимости не в этом дело

    $ = Get-WMIObject Win32_ComputerSystem - $computer

    $Sheet.Cells.Item($intRow, 8) = $.DNSHostName

    18 апреля 2012 г. 6:56
  • Вместо $.DNSHostName наверное надо $Printer.DNSHostName


    Сазонов Илья http://isazonov.wordpress.com/

    Да, по видимости не в этом дело

    $ = Get-WMIObject Win32_ComputerSystem - $computer

    $Sheet.Cells.Item($intRow, 8) = $.DNSHostName

    Скрипт скопирован с кучей ошибок,что я привел.

    Должно быть не - $Computer ,а -ComputerName $computer

    $Sheet.Cells.Item($intRow, 8) = $computername.DNSHostName

    • Помечено в качестве ответа Denis.Pasternak 7 мая 2012 г. 11:56
    18 апреля 2012 г. 7:36
    Отвечающий