Renomme les files d'impressions. Par exemple ceci :
Microsoft XPS Document Writer (de Bob) dans la session 2
sera renommé en
Microsoft XPS Document Writer_Bob
Ce script ne DOIT PAS être exécuté par un administrateur car ce dernier verra toutes les files d'impression de tous les utilisateurs et du coup il les renommera toutes.
Notez que pour Citrix en XenApp 7, ce script n'a plus d'intérêt avec le CTX142160
http://support.citrix.com/article/CTX142160
Dim WSHShell
Dim vUserName, varNewName
Set WSHShell = CreateObject("WScript.Shell")
vUserName = WSHShell.ExpandEnvironmentStrings("%USERNAME%")
'Wscript.Echo "vUserName : " & vUserName
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer",,48)
For Each objItem in colItems
'Wscript.Echo "-----------------------------------"
'Wscript.Echo "Win32_Printer instance"
'Wscript.Echo "-----------------------------------"
varName = objItem.Name
'Wscript.Echo "Name: " & varName
'MyPos = InStr (Lcase(varName), lcase(vUserName))
'If MyPos > 0 Then
'End If
MyPos = InStr (Lcase(varName), "(")
If MyPos > 0 Then
varNewName = Left(varName, MyPos-1)
varNewName = varNewName & "_" & vUserName
'Wscript.Echo "Renomage en " & varNewName
intResult = objItem.RenamePrinter(varNewName)
Select case intResult
'Case 0 : WScript.Echo "Success"
'Case 5 : WScript.Echo "Access denied"
'Case 1801 : WScript.Echo "Invalid printer name"
End Select
'exit for
End If
Next
Lien vers le fichier : cliquez ici
La version ci-dessous reprend le même principe avec des fonctionnalités en plus :
Création d'un fichier de log
plusieurs passage pour éviter qu'une file d'impression ne soit pas traitée car elle a mis du temps à monter
Dim WSHShell
Dim vUserName, varNewName
Dim objFSO, objTextFile
Dim NomFichier, CheminFichier, CheminScriptActuel, ScriptFileName, Position
'Déclaration des constantes
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8
Const CstLogger = 1
Set WSHShell = CreateObject("WScript.Shell")
vUserName = WSHShell.ExpandEnvironmentStrings("%USERNAME%") 'Pour le login du user
ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)
NomFichier = ScriptFileName & "_" & vUserName & "_Log.txt"
CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
CheminFichier = CheminScriptActuel & "\" & NomFichier 'Déclaration du chemin et du nom du fichier
If CstLogger = 1 Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(CheminFichier, ForWritting, True)
objTextFile.WriteLine(Now) 'On ecrit la date et l'heure dans le fichier
End If
'Wscript.Echo "vUserName : " & vUserName
strComputer = "."
WScript.Sleep(8000)
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Debut du premier passage")
Call subRenamePrinters
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Fin du premier passage")
WScript.Sleep(20000)
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Debut du second passage")
Call subRenamePrinters
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Fin du second passage")
WScript.Sleep(60000)
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Debut du troisieme passage")
Call subRenamePrinters
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Fin du troisieme passage")
Sub subRenamePrinters()
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer",,48)
For Each objItem in colItems
'Wscript.Echo "-----------------------------------"
'Wscript.Echo "Win32_Printer instance"
'Wscript.Echo "-----------------------------------"
varName = objItem.Name
'Wscript.Echo "Name: " & varName
'MyPos = InStr (Lcase(varName), lcase(vUserName))
'If MyPos > 0 Then 'Si la file d'impression contient le login du user
'End If
MyPos = InStr (Lcase(varName), "(")
If MyPos > 0 Then 'Si la file d'impression contient une (
If CstLogger = 1 Then objTextFile.WriteLine(varName) 'Nom de l'imprimante regardée
varNewName = Left(varName, MyPos-1)
varNewName = Trim(varNewName) & "_" & vUserName
'Wscript.Echo "Renomage en " & varNewName
If CstLogger = 1 Then objTextFile.WriteLine("Renommage en " & varNewName) 'Nom de l'imprimante regardée
intResult = objItem.RenamePrinter(varNewName)
Select case intResult
'Case 0 : WScript.Echo "Success"
'Case 5 : WScript.Echo "Access denied"
'Case 1801 : WScript.Echo "Invalid printer name"
End Select
'exit for
End If
Next
Set colItems = Nothing
Set objWMIService = Nothing
End Sub
Set WSHShell = Nothing
If CstLogger = 1 Then
objTextFile.Close 'Fermeture du fichier
Set objTextFile = Nothing
Set objFSO = Nothing
End If
Lien vers le fichier : cliquez ici
La version ci-dessous ajoute, avant renommage, l'effacement d'une précédent file d'impression qui porte le même nom que celui qui est voulu
Dim WSHShell
Dim vUserName, varNewName, varResultat
Dim objFSO, objTextFile
Dim NomFichier, CheminFichier, CheminScriptActuel, ScriptFileName, Position
'Déclaration des constantes
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8
Const CstLogger = 1
Set WSHShell = CreateObject("WScript.Shell")
vUserName = WSHShell.ExpandEnvironmentStrings("%USERNAME%") 'Pour le login du user
ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)
NomFichier = ScriptFileName & "_" & vUserName & "_Log.txt"
CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
CheminFichier = CheminScriptActuel & "\" & NomFichier 'Déclaration du chemin et du nom du fichier
If CstLogger = 1 Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(CheminFichier, ForWritting, True)
objTextFile.WriteLine(Now) 'On ecrit la date et l'heure dans le fichier
End If
'Wscript.Echo "vUserName : " & vUserName
strComputer = "."
WScript.Sleep(8000)
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Debut du premier passage")
Call subRenamePrinters
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Fin du premier passage")
WScript.Sleep(20000)
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Debut du second passage")
Call subRenamePrinters
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Fin du second passage")
WScript.Sleep(60000)
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Debut du troisieme passage")
Call subRenamePrinters
If CstLogger = 1 Then objTextFile.WriteLine(Now & "Fin du troisieme passage")
Sub subRenamePrinters()
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer",,48)
For Each objItem in colItems
'Wscript.Echo "-----------------------------------"
'Wscript.Echo "Win32_Printer instance"
'Wscript.Echo "-----------------------------------"
varName = objItem.Name
'Wscript.Echo "Name: " & varName
If CstLogger = 1 Then objTextFile.WriteLine(varName) 'Nom de l'imprimante regardée
'FindPrinterAndDelete
'Determination du nom cible
MyPos = InStr (Lcase(varName), "(")
If MyPos > 0 Then 'Si la file d'impression contient une (
varNewName = Left(varName, MyPos-1)
varNewName = Trim(varNewName) & "_" & vUserName
If Lcase(varName) <> Lcase(varNewName) Then 'Si la file d'impression doit être renommée
'Wscript.Echo "Renomage en " & varNewName
If CstLogger = 1 Then objTextFile.WriteLine("La file d'impression doit être renommée en " & varNewName) 'Nom de l'imprimante regardée
If CstLogger = 1 Then objTextFile.WriteLine("Effacement eventuel d une precedente file : ") 'Nom de l'imprimante regardée
varResultat = FindPrinterAndDelete(varNewName)
If (CstLogger = 1) And (varResultat = 0) Then objTextFile.WriteLine("Pas d effacement d une precedente file nommee " & varNewName) 'Nom de l'imprimante regardée
If (CstLogger = 1) And (varResultat = 1) Then objTextFile.WriteLine("Une precedente file d impression nommee " & varNewName & " a ete effacee") 'Nom de l'imprimante regardée
If CstLogger = 1 Then objTextFile.WriteLine("Renommage de " & varName & " en " & varNewName)
intResult = objItem.RenamePrinter(varNewName)
Select case intResult
'Case 0 : WScript.Echo "Success"
'Case 5 : WScript.Echo "Access denied"
'Case 1801 : WScript.Echo "Invalid printer name"
End Select
'exit for
End If
End If
Next
Set colItems = Nothing
Set objWMIService = Nothing
End Sub
Function FindPrinterAndDelete(ByVal varNomPrinter)
Dim varTrouve
Dim objWMIServiceforDelete, colItemsforDelete
varTrouve = 0
Set objWMIServiceforDelete = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItemsforDelete = objWMIServiceforDelete.ExecQuery("SELECT * FROM Win32_Printer where Name = '" & varNomPrinter & "'",,48)
For Each objItem in colItemsforDelete
varTrouve = 1
objItem.Delete_ 'Effacement de la file d'impression
Exit For
Next
FindPrinter = varTrouve
End Function
Set WSHShell = Nothing
If CstLogger = 1 Then
objTextFile.Close 'Fermeture du fichier
Set objTextFile = Nothing
Set objFSO = Nothing
End If
Lien vers le fichier : cliquez ici
Pages Web
Site Web | Description |
---|---|
Blog.cloud-client.info | Tip: Getting legacy printer names back in XenApp 7.5 |
Citrix CTX142160 | This fix reinstates the "Legacy printer names" policy, which was not previously available in Version 7.x of the product. |
Article(s) en relation(s)