Toon posts:

Oplijsten printers remote pc's

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey tweakers!

Ik ben op zoek naar een stukje software dat me toelaat om te zien welke printers er op een computer op m'n netwerk zitten. Het zit namelijk zo, we zijn bezig met onze oude printserver te vervangen door een iets meer hedendaags beestje. Na een groot deel van de migratie aan de client-kant blijkt dat een aantal pc's die reeds hadden aangepast moeten zijn, toch nog z'n prints blijkt door te sturen naar de oude server.
Ik ben nu op zoek naar een manier om van de pc's op te lijsten welke de lokaal geïnstalleerde printers zijn. Na een half uurtje googlen was ik enkele scriptjes tegengekomen die dit soort zaken zou moeten klaren zoals bijvoorbeeld:

:: ===============
:: READ THIS FIRST
:: ===============
:: * This script require "Computers.txt" file on C: drive root from where it will read computer names.
:: * Successful run will generate "PrintersReport.txt" file on C: drive root
:: * Copy and paste following script in notepad and save it with any name having .cmd extension.

:: *** SCRIPT START ***
@Echo Off
SetLocal EnableDelayedExpansion

IF NOT EXIST C:\Computers.txt Goto ShowErr
FOR %%R IN (C:\Computers.txt) Do IF %%~zR EQU 0 Goto ShowErr
IF EXIST C:\PrintersReport.txt DEL /F /Q C:\PrintersReport.txt

FOR /F "delims=*" %%c IN ('Type C:\Computers.txt') Do (
Echo Processing: %%c
Echo ------------------------------------->>C:\PrintersReport.txt
Echo Printers installed on %%c: >>C:\PrintersReport.txt
Echo ------------------------------------->>C:\PrintersReport.txt
SET Qry=WMIC /Node:"%%c" Printer WHERE "Default=True" GET NAME /Value ^| FIND /I "Name="
FOR /F "Delims== Tokens=2" %%p IN ('!Qry!') Do (SET DPrinter=%%p)
SET Qry=WMIC /Node:"%%c" Printer GET NAME /Value ^| FIND /I "Name="
FOR /F "Delims== Tokens=2" %%p IN ('!Qry!') Do (
IF "!DPrinter!"=="%%p" (
Echo %%p ^(Default^)>>C:\PrintersReport.txt) ELSE (
Echo %%p >>C:\PrintersReport.txt)
)
)
Goto EndScript
:ShowErr
Echo "C:\Computers.txt" file does not exist or file is empty!
:EndScript
ENDLOCAL
:: Batch Script End


Dit blijkt echter op mijn pc foutloos te werken, echter wanneer ik het met mijn adminaccount vanaf mijn pc op de remote pc's laat uitvoeren krijg ik geen data, nochtans staat Windows Firewall op al deze toestellen uitgeschakeld.
Kennen jullie een ander stukje software, of hebben jullie een idee wat er mis zou kunnen gaan? De output van het script is telkens het volgende:

Processing: spoed014
Knooppunt - spoed014
Fout:
Code = 0x800706ba
Beschrijving = De RPC-server is niet beschikbaar.
Faciliteit = Win32
Knooppunt - spoed014
Fout:
Code = 0x800706ba
Beschrijving = De RPC-server is niet beschikbaar.
Faciliteit = Win32


(Aan de naam van de pc alleen al kunnen jullie waarschijnlijk wel al afleiden waarom we liever niet overal lokaal gaan kijken ;) )

Vervolgens wordt dit weggeschreven:
Printers installed on spoed014:
-------------------------------------
-------------------------------------


Als jullie een stukje software kennen dat dit kan, heb ik daarvoor wel voorkeur, maar andere suggesties zijn ook welkom hoor. :)

Alvast al heel hard bedankt!

  • _H_G_
  • Registratie: September 2002
  • Nu online
Om wat voor clients gaat het? Standaard firewall aan en/of netwerk policies actief die firewall aanpassen?

Verwijderd

Topicstarter
Het zijn Windows XP Clients, de Firewall staat altijd uit, en bijgevolg ook geen policies die aan de firewall aanpassingen doen.
Bedankt al voor je reactie :)

  • _H_G_
  • Registratie: September 2002
  • Nu online
Oops. had er overheen gelezen :(

Het script werkt iig wel (al moet ik zelf de firewall opzetten via Netsh firewall set service RemoteAdmin: wel firewall hier).

Ondertussen even gezocht naar een powershell oplossing. Vind het ook wel een interessant tooltje om te hebben.
code:
1
Get-WmiObject win32_printer -computer CLIENTNAAM | ? { $_.type -ne 1 } | sort name | ConvertTo-Html > c:\out.html

(zonder loopje dan)
Het is dus denk ik niet wat je zoekt. Via WMI krijg je alleen printers te zien die lokaal geïnstalleerd zijn?

[ Voor 60% gewijzigd door _H_G_ op 14-12-2009 11:36 ]


  • _H_G_
  • Registratie: September 2002
  • Nu online
Hier nog wat gevonden:
http://technet.microsoft.com/en-us/library/ee692772.aspx
En dan met name punt Q 10

Ik kan blijkbaar via WMI wel remote een printerlijst ophalen, maar niet zomaar de printers die weer verbonden zijn met een derde computer (Dat delegaten snap ik niet helemaal). Met als resultaat worden alleen de lokaal geïnstalleerde printers weergegeven.

Dus sorry voor de spam. Hopelijk post er iemand met wat nuttiger info :)

Verwijderd

Topicstarter
Nee, ik zoek echt naar netwerkprinters. Lijkt me echt bizar dat ik echt geen programma's vind die die functionaliteit bieden. Je zou toch denken dat het iets is was best wel courant is. :/

Edit:
_H_G_, bedankt dat je al wou mee denken. Misschien dat iemand anders iets weet?

Ik kwam bij de scripting guys het volgende tegen:
strComputer = "spoed025"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer")

For Each objPrinter in colPrinters
If objPrinter.Attributes And 64 Then
strPrinterType = "Local"
Else
strPrinterType = "Network"
End If
Wscript.Echo objPrinter.Name & " -- " & strPrinterType
Next


Maar deze lijkt helemaal niets te doen :/

[ Voor 62% gewijzigd door Verwijderd op 14-12-2009 12:00 ]


  • _H_G_
  • Registratie: September 2002
  • Nu online
Voor de volledigheid: blijkbaar zit er al standaard een WMI script in Windows XP.
<systemdir>\prnmngr.vbs

Met "cscript prnmngr.vbs -l -s <remotenaam>" krijg ik wederom alleen de lokale printers van die PC te zien.

Verwijderd

Topicstarter
Heb nu deze gevonden, we komen iets dichter:

'START OF FILE

Option Explicit

Const ListOnlyIPPrinters = true

Dim LogFileName
LogFileName = WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\printer_log.txt"

DeleteFile( LogFileName )

Dim sList
Dim aList
Dim sPC

sList = InputBox("Enter list of computers comma delimited:", "Printer List")

aList = Split(sList, ",")

For Each sPC in aList
sPC = Trim(sPC)

ListIPPrinters( sPC )

Call LogToFile( LogFileName, "")
Next

msgbox "done"

Sub ListIPPrinters( ComputerName )
Dim objWMIService, colInstalledPrinters, objPrinter

ON ERROR RESUME NEXT
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ComputerName & "\root\cimv2")
If ERR.NUMBER <> 0 Then
Call LogToFile( LogFileName, "Problem connecting to " & ComputerName & ". " & Err.Description)
Err.Clear
Exit Sub
End If
ON ERROR GOTO 0

Call LogToFile( LogFileName, "Connected to " & ComputerName)

Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")

Call LogToFile( LogFileName, vbTab & "Found " & colInstalledPrinters.count & " printers.")

For Each objPrinter in colInstalledPrinters
If ListOnlyIPPrinters Then
If instr(1, objPrinter.PortName, "IP_", 1) = 1 Then
Call LogToFile( LogFileName, vbTab & objPrinter.Name & " - " & objPrinter.PortName)
End If
Else
Call LogToFile( LogFileName, vbTab & objPrinter.Name & " - " & objPrinter.PortName)
End If
Next
End Sub

Sub LogToFile( sFileName, sText )
Dim FSO, File
Set FSO = CreateOBject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile( sFileName, 8, True)
File.WriteLine( sText )
File.Close
Set File = Nothing
Set FSO = Nothing
End Sub

Sub DeleteFile( sFileName )
Dim FSO
Set FSO = CreateOBject("Scripting.FileSystemObject")
If FSO.FileExists( sFileName ) Then
FSO.DeleteFile( sFileName )
End If
Set FSO = Nothing
End Sub

'END OF FILE.



en die doet
Connected to spoed007
Found 1 printers.

Connected to spoed010
Found 1 printers.
ETIKET - IP_172.20.210.181

Connected to spoed012
Found 0 printers.

Connected to spoed016
Found 1 printers.

Problem connecting to spoed014. De externe servercomputer bestaat niet of is niet beschikbaar

Problem connecting to spoed017. De externe servercomputer bestaat niet of is niet beschikbaar

Connected to spoed018
Found 2 printers.

Connected to spoed009
Found 2 printers.

Connected to spoed005
Found 1 printers.

Connected to spoed021
Found 0 printers.

Connected to spoed022
Found 0 printers.

Connected to spoed023
Found 0 printers.

Connected to spoed025
Found 0 printers.

Connected to spoed008
Found 2 printers.

Connected to spoed024
Found 1 printers.

Problem connecting to spoed026. De externe servercomputer bestaat niet of is niet beschikbaar

Problem connecting to spoed002. De externe servercomputer bestaat niet of is niet beschikbaar



Maar waarom ie ze niet wil tonen... (Als ik op de pc check zie wel dat het alweer enkel lokale printers zijn, hmpff)

Als ik hem uitvoer uit m'n eigen pc hier krijg ik echter wel:


Connected to helpdesk004
Found 11 printers.
\\clstprint\Info_SL1
\\clstprint\Info_SL1_Lade2
\\clstprint\Info_SL2
\\clstprint\Info_SL2_Lade2
\\SRVPR\Info_SL1
\\SRVPR\Info_SL2
\\SRVPR\Info_SL2_Lade2
\\SRVPR\Info_VK1
\\SRVPR\Tarfac_SL3


en dat klopt wel...

Verwijderd

Topicstarter
Volgende piste. Elke pc in z'n opstartscript laten oplijsten welke printers er aan gekoppeld zijn, dit op het netwerk in een file wegschrijven. Spijtig dat het zo moet :/

  • _H_G_
  • Registratie: September 2002
  • Nu online
Geen slecht idee :)

Had nog wel een ander script gevonden dat remote de registry uitleest, wat ook kan werken. Zal je de link besparen, want het script zelf was hel. Het zou wel moeten werken en niet zo moeilijk moeten zijn om zelf te scripten.

Verwijderd

Topicstarter
Je mag 'm altijd posten. Onze logon scripts lopen nu al twee minuten zonder de aanpassing zoals hierboven vermeld. Kan nooit kwaad om het toch nog even te proberen :)

  • _H_G_
  • Registratie: September 2002
  • Nu online
Bedoelde: meer een hel om te zien wat er gebeurde.

http://www.petri.co.il/forums/showthread.php?p=189715

Bij nader inzien is het nog niet zo gemakkelijk om zelf te schrijven. Ik dacht even dat een REG.EXE QUERY al uitkomst zou bieden, maar kan niet direct current_user registry benaderen |:(

Verwijderd

Topicstarter
Sorry voor de bump, maar misschien info die handig kan zijn voor tweakers die in de toekomst nog een soortgelijk probleem hebben.
Met regedit kan je met het register van een client verbinden door Bestand -> Verbinding maken met netwerkregister... te doen. (Indien de remote registry service actief is op de doelpc).
Wanneer je dan in HKEY_USERS onder het juiste SID de key Printers -> Connections opent, kan je alle gekoppelde connecties met netwerkprinters zien. Het volstaat de sleutel van deze connectie te verwijderen om de connectie van de PC met deze netwerkprinter te verwijderen, (en dus de printer te deïnstalleren voor deze pc)

[ Voor 4% gewijzigd door Verwijderd op 15-12-2009 13:14 ]

Pagina: 1