Problem mir Druckerfreigabe in VB Script
Hallo Leute!
Unten angeführtes Script soll mir an einem Terminalserver zum Drucker ubenennen und Freigeben dienen.
Allerdings gibt dieses Script wenn ich es in einer Remotesitzung ausführe immer den Standarddrucker der Console und nicht des gerade angemeldeten Users frei. Was stimmt nicht?
on error resume next
Set shell = CreateObject("Shell.Application")
Set folder = shell.NameSpace(4)
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")
'Eventuell vorhandenen DOSPrinter Freigabe und LPT Verbindung löschen
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemovePrinterConnection "LPT1:",true,true
For Each objPrinter in colInstalledPrinters
If objPrinter.ShareName = "DOSprinter" Then
objPrinter.Shared = False
objPrinter.Put_
End If
Next
'Druckernamen ändern (Entfernen der Erweiterung "in Sitzung XX")
For Each item In folder.Items
If item.Name <> "Drucker hinzufügen" Then
arrPrinter = Split(item.Name, ")")
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer where Name='" & item.Name & "'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
call objItem.RenamePrinter(arrPrinter(0))
Next
'Freigabe des Standarddruckers als DOSprinter und zuweisung der LPT1 Schnittstelle
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Default = True")
For Each objPrinter in colInstalledPrinters
objPrinter.Shared = TRUE
objPrinter.ShareName = "DOSprinter"
objPrinter.Put_
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.AddPrinterConnection "LPT1", "\\127.0.0.1\Dosprinter"
Next
End If
Next
Unten angeführtes Script soll mir an einem Terminalserver zum Drucker ubenennen und Freigeben dienen.
Allerdings gibt dieses Script wenn ich es in einer Remotesitzung ausführe immer den Standarddrucker der Console und nicht des gerade angemeldeten Users frei. Was stimmt nicht?
on error resume next
Set shell = CreateObject("Shell.Application")
Set folder = shell.NameSpace(4)
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")
'Eventuell vorhandenen DOSPrinter Freigabe und LPT Verbindung löschen
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemovePrinterConnection "LPT1:",true,true
For Each objPrinter in colInstalledPrinters
If objPrinter.ShareName = "DOSprinter" Then
objPrinter.Shared = False
objPrinter.Put_
End If
Next
'Druckernamen ändern (Entfernen der Erweiterung "in Sitzung XX")
For Each item In folder.Items
If item.Name <> "Drucker hinzufügen" Then
arrPrinter = Split(item.Name, ")")
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer where Name='" & item.Name & "'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
call objItem.RenamePrinter(arrPrinter(0))
Next
'Freigabe des Standarddruckers als DOSprinter und zuweisung der LPT1 Schnittstelle
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Default = True")
For Each objPrinter in colInstalledPrinters
objPrinter.Shared = TRUE
objPrinter.ShareName = "DOSprinter"
objPrinter.Put_
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.AddPrinterConnection "LPT1", "\\127.0.0.1\Dosprinter"
Next
End If
Next
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51467
Url: https://administrator.de/forum/problem-mir-druckerfreigabe-in-vb-script-51467.html
Ausgedruckt am: 13.04.2025 um 18:04 Uhr
3 Kommentare
Neuester Kommentar
Fehler sehe ich so auf Anhieb keinen, aber Windows ist halt im Grunde seines Herzens ein Single User System. Da hilft auch ein bischen Terminal Server Aufsatz nicht wirklich weiter. Will sagen, eventuell gibts immer nur die Infos des Consolenusers, würde mich nicht wundern.
Eventuell hilft es, wenn man beim Verbinden seine Rechte weitergibt (ist laut MS aber ein Sicherheitsrisiko):
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Delegate}!\\.\root\CIMV2")
Eventuell hilft es, wenn man beim Verbinden seine Rechte weitergibt (ist laut MS aber ein Sicherheitsrisiko):
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Delegate}!\\.\root\CIMV2")
Hallo kinggunta!
Mit einerl leichten Ergänzung Deiner Function würde ich es wie folgt versuchen:
Auf Grundlage dieser Function könnte dann der entsprechende Programmteil oben etwa so aussehen:
Grüße
bastla
Mit einerl leichten Ergänzung Deiner Function würde ich es wie folgt versuchen:
1
2
3
4
5
6
2
3
4
5
6
Function StandardPrinter()
Set wshshell = CreateObject("Wscript.Shell")
key = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\DEVICE"
astrAlt = Split(wshshell.RegRead(key), ",")
StandardPrinter = astrAlt(0)
End Function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
...
'Freigabe des Standarddruckers als DOSprinter und Zuweisung der LPT1 Schnittstelle
strStandard = StandardPrinter()
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Name='" & strStandard & "'",,48)
For Each objPrinter in colInstalledPrinters
objPrinter.Shared = TRUE
objPrinter.ShareName = "DOSprinter"
objPrinter.Put_
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.AddPrinterConnection "LPT1", "\\127.0.0.1\Dosprinter"
Next
...
...
Grüße
bastla