kinggunta
Goto Top

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

Content-Key: 51467

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

Printed on: April 20, 2024 at 15:04 o'clock

Member: AndreasHoster
AndreasHoster Feb 12, 2007 at 16:12:03 (UTC)
Goto Top
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")
Member: kinggunta
kinggunta Feb 12, 2007 at 16:32:42 (UTC)
Goto Top
Hab schon eine Lösung gefunden wie ich den Standardrucker des aktuellen users auslese
aber wie bau ich das jetzt in mein aktuelles script ein, damit er freigegeben wird?


Function StandardPrinter()
Set wshshell = CreateObject("Wscript.Shell")

key = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\DEVICE"

StandardAlt = wshshell.RegRead(key)
StandardPrinter = StandardAlt
End Function
Member: bastla
bastla Feb 12, 2007 at 18:50:13 (UTC)
Goto Top
Hallo kinggunta!

Mit einerl leichten Ergänzung Deiner Function würde ich es wie folgt versuchen:
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
Auf Grundlage dieser Function könnte dann der entsprechende Programmteil oben etwa so aussehen:
...
...
'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