Input from Chris PageNot sure if this is a "good solution" but it's been in use for some years,
still untidy code I'm afraid. HTH.
Our solution uses Con2Prt.exe from the reskit. Drivers are auto-installed if
necessary.
We call SetUpPrinters in the Login script.
The [Local Printers] section is written by the Audit code which uses WMI to
read the current printers as follows:
code:
;Printers (Local)
$I = 1
WriteProfileString("Y:\@WKSTA\Status.ini","System","Printers", "Status, Name, Location, Default, Shared, Network, Local, Driver, Port, Server, Share, DeviceID")
$Collection = GetObject("winmgmts:").InstancesOf("Win32_Printer")
WriteStatus("")
For each $Item in $Collection
$Data = "" + $Item.Status + ", " + $Item.Name + ", " + $Item.Location + ", " + FormatAttr($Item.Attributes) ;commer added by routine
$Data = $Data + $Item.DriverName + ", " + $Item.PortName + ", " + $Item.ServerName + ", " + $Item.ShareName + ", " + $Item.DeviceID
WriteProfileString("Y:\@WKSTA\Status.ini","System","Printer" + $I, $Data)
If ($Item.Attributes & 64) And (InStr($Item.PortName, "\\") = 0)
;Local Printer
$Data = "" + $Item.Name + ", Driver: " + $Item.DriverName
If ($Item.Attributes & 8) $Data = $Data + ", Shared as: " + $Item.ShareName endif
WriteProfileString("Y:\Stations.ini","Local Printers",@WKSTA, $Data + " LOCATION: " + $Item.Location)
WriteStatus("Local Printer: " + $Item.Name)
WriteStatus(" Driver: " + $Item.DriverName)
WriteStatus(" Shared as: " + $Item.ShareName)
endif
If $Item.Attributes & 4
;Default Printer
$Data = "" + $Item.Name + ", Driver: " + $Item.DriverName
If ($Item.Attributes & 64) And (InStr($Item.PortName, "\\") = 0) $Data = "LOCAL: " + $Data endif
WriteProfileString("Y:\Status.ini","Default Printers",@WKSTA, $Data)
WriteStatus("Default Printer: " + $Item.Name)
WriteStatus(" Driver: " + $Item.DriverName)
WriteStatus(" Location: " + $Item.Location)
endif
$I = $I + 1
Next
We creates an outline of the INI file and the Station's directory if it
doesn't exist thus:
code:
if Exist("Y:\@WKSTA")=0 MD "Y:\@WKSTA" endif
$ret = WriteProfileString("Y:\Stations.ini","Kixtart","Version","$Ver")
$ret = $ret + WriteProfileString("Y:\Stations.ini","Kixtart","PDC","$PDC")
$ret = $ret + WriteProfileString("Y:\Stations.ini","Kixtart","BDC","$BDC")
$ret = $ret + WriteProfileString("Y:\Stations.ini","Kixtart","CDServer","$CDServer")
$ret = $ret + WriteProfileString("Y:\Stations.ini","Kixtart","KIX Version","@KIX")
;create List of Stations and outline of file
$ret = $ret + WriteProfileString("Y:\Stations.ini","Additional Printers","Printer1-5","\\NameOfComputerWithPrinterAttached\ShareName")
$ret = $ret + WriteProfileString("Y:\Stations.ini","Printers","ComputerName","\\NameOfComputerWithPrinterAttached\ShareName")
$ret = $ret + WriteProfileString("Y:\Stations.ini","Stations",@WKSTA,"@Userid at @Time on @Day @MDAYNO @Month @Year @ProductType Ver.@DOS Build @Build @CSD")
$ret = $ret + WriteProfileString("Y:\@WKSTA\Station.ini","Additional Printers","Printer1-5","\\NameOfComputerWithPrinterAttached\ShareName")
$ret = $ret + WriteProfileString("Y:\@WKSTA\Status.ini","System","OS","@ProductType Ver @DOS Build @Build @CSD")
if $ret <> 0 color r/n ? "WARNING: Update Stations.ini errors: $ret, @Error" color w/n endif
[ 16 November 2001: Message edited by: MCA ]