marcelq
Goto Top

VBS Drucker entfernen

Hallo ich habe eine Frage zu meinem Script.

Erstmal ein paar Eckdaten. Ich habe ein Script erstellt das Drucker von meinem Rechner und anderen Rechnern in einer Domain löschen soll. Nun ist es aber so, dass ich eine Liste an Druckern habe die wenn vorhanden gelöscht werden sollen aber, habe ich nun einen dieser Drucker nicht im Verbund mit meinem Rechner, versucht das Script sicher erst mit dem Drucker zu verbinden. Sprich wenn ich ca. 15 Netzwerkdrucker habe und nur 2 am Rechner verbunden sind übers Netz verbindet er sich mit 15 Drucker wobei 13 nicht am Lokelm Rechner vorhanden sind. Das kostet mich echt eine Menge zeit bis das Script mal komplett durchgelaufen ist und danach die passenden Drucker verbunden sind.

Hier mal das Script

Option Explicit
Dim objNetwork, oAdapters, oAdapter, IPAddress, WshNetwork, WshShell, oPrinter, i, PrinterPath

Set oAdapters = GetObject("winmgmts:").execquery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oPrinter = WshNetwork.EnumPrinterConnections
Set objNetwork = WScript.CreateObject("WScript.Network")

For Each oAdapter In oAdapters
With oAdapter
IPAddress = IPAddress + " " + Join(.IPAddress)
End With
Next


On Error Resume Next
objNetwork.RemoveNetworkDrive "X:"
objNetwork.RemoveNetworkDrive "o:"
On Error GoTo 0


REM Denoc
On error resume next
For i = 0 to oPrinter.Count - 1 Step 2
PrinterPath = "\\Server 1\Druckername"
WshNetwork.RemovePrinterConnection "\\Server 1\Druckername"

>Dieser Drucker vom Server 2 wäre jetzt nicht mit dem Domain Rechner verbunden.
>Er Versucht sich aber zu verbinden und das soll er nicht sondern einfach nur löschen

PrinterPath = "\\Server 2\Druckername"
WshNetwork.RemovePrinterConnection "\\Server 2\Druckername"


Next
Das ist jetzt nur ein Teilauszug was sich auf das löschen vom Drucker bezieht.
Mein Problem ist das er sich mit jedem Drucker, ob vorhanden oder nicht, verbindet. Ich will aber das er alle Drucker einer bestimmten Liste löscht ohne sich zu verbinden.

Das Script soll also eine bestimmte Liste vohanden haben wo alle Netzwerkdrucker difiniert sind und sie dann, wenn vorhanden vom Rechner löschen soll ohne sich zum Drucker zu verbinden.

Content-ID: 144153

Url: https://administrator.de/contentid/144153

Ausgedruckt am: 23.11.2024 um 08:11 Uhr

Karo
Karo 04.06.2010 um 10:27:00 Uhr
Goto Top
Moin,

also ich mache das mittels Con2Prt aus dem Reskit ohne Stress
con2prt Optionen: /c = connect; /cd= connect default; /f = lösche vorhandene
durch den Parameter /i wird nicht in Klein-/Großschreibung unterschieden

z.B. %logonserver%\netlogon\con2prt /f /i "\\TEST0001\HPDJ5550"

wäre im Fall der Liste z.B.
for /f "tokens=* delims=" %%i in ("%logonserver%\netlogon\PRINTERLIST.txt") do (
%logonserver%\netlogon\con2prt /f /i "\\TEST0001\HPDJ5550"
)

Karo
MarcelQ
MarcelQ 04.06.2010 um 13:08:45 Uhr
Goto Top
Leider ist mir dadurch nicht geholfen, ich bin ein echter VBscript Anfänger und kann damit nicht gerade viel anfangen.
Ich würde auch gerne bei der Art wie ich es angefangen habe bleiben.
Karo
Karo 04.06.2010 um 13:50:50 Uhr
Goto Top
OK, dann hier mal ein Script, welches ich benutze um bei Usern Drucker umzubenennen.
Den Abschnitt NEW MAPPING brauchst Du in Deinem Fall nicht.
Die Datei PRINTERS.TXT besteht bei mir aus Zeilen mit <ALTER DRUCKER>;<NEUER DRUCKER>
(\\SERVERNAME\DRUCKER_PCL6;\\SERVERNAME\PRINTER_PCL6), wobei Du natürlich <NEUER DRUCKER> nicht benötigst, aber um das Script nicht umschreiben zu müssen (wegen Split()-Anweisung etc ) kannst Du nach dem Semikolon den gleichen Namen verwenden

Karo

' Set printers
' **
On Error Resume Next
Dim objNetwork, fs, fsFILE
Dim Counter, aryPrinter(999), strComputer
Dim splPrinter, x, fstemp
Set objNetwork = CreateObject("WScript.Network")
Set fs = CreateObject("Scripting.FileSystemObject")
Set fstemp = fs.GetSpecialFolder(2)
wscript.echo ("The path to your TEMP folder is '" & fstemp & "'." )

'COPY FILE TO TEMP
Set fsFILE = fs.GetFile("\\SERVERNAME\netlogon\printers.txt")
fsFILE.copy (fstemp & "\printers.txt")

'READ FILE
Set fsFILE = fs.OpenTextFile(fstemp & "\printers.txt")
Counter = 0
Do Until fsFILE.AtEndOfStream
Counter = Counter + 1
aryPrinter(Counter) = fsFILE.Readline
'wscript.echo Counter & " ---- " & aryPrinter(Counter)
Loop

'READ MAPPED PRINTERS FROM USER
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

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

For Each objPrinter in colInstalledPrinters
wscript.echo "##################################################"
WScript.echo "SEARCH: " & objPrinter.Name
For x = 1 to Counter
splPrinter=Split(aryPrinter(x),";")
'COMPARE MAPPED PRINTERS WITH PRINTERS IN FILE
If InStr(1,objPrinter.Name,splPrinter(0),1) > 0 Then
wscript.echo "-YES-"
'Is Printer Default
If objPrinter.Default = "True" Then DefPrinter = "TRUE"

'DELETE OLD MAPPING
wscript.echo "-Delete Old Mapping-"
objNetwork.RemovePrinterConnection splPrinter(0)
wscript.echo splPrinter(0)

'NEW MAPPING
wscript.echo "-New Mapping-"
objNetwork.AddWindowsPrinterConnection splPrinter(1)
wscript.echo splPrinter(1)

'IF PRINTER IS DEFAULT (True) SET NEW DEFAULT
If DefPrinter = "TRUE" Then
wscript.echo "-Set as Default"
objNetwork.SetDefaultPrinter splPrinter(1)
wscript.echo splPrinter(1)
Else
End If
'NEW MAPPING END
Else
End If
Next
Next