(modifié le 1 novembre 2017 à 14:23)

Vous avez peut-être un script d'ouverture de session en dur dans vos comptes utilisateurs. Ces scripts contiennent souvent des agents de toutes sortes (collecte, impression, assistant) qui peuvent consommer des ressources de façon anormale sur vos serveurs.

Voici comment inhiber l'exécution d'un script d'ouverture de session sur vos OS serveurs.

VBS

Cette astuce fonctionne en VBScript, si vous utilisez un autre langage vous ne pourrez pas l'utiliser (mais ça doit s'adapter assez facilement).

Dim winOS
Set WshShell = CreateObject("WScript.Shell") 

winOS = LCase(GetObject("winmgmts:root\cimv2:Win32_OperatingSystem=@").Caption)

If InStr(winOs, "server") > 0 Then
 ' Si OS Windows Server
 ' decommenter pour debug :
 ' WshShell.Run "cmd /C echo " & winOs & " > %temp%\BM_os_version.log"
Else
 WshShell.Run "\\srv-app.maboite.local\app$\run.exe /s"
End If

Fonctionnement : on lit la version de l'OS dans la variable winOs puis on recherche la présence de la chaine "server". Si c'est le cas on ne fait rien, sinon on lance les programmes habituels.

En cas de besoin décommettez la ligne de debug puis allez dans %temp% avec l'explorateur pour voir le contenu de la variable. Vous pouvez aussi faire un :

Wscript.Echo winOS

Mais balancer une popup comme ça aux utilisateurs n'est pas la meilleure idée... à moins de le faire uniquement sur votre utilisateur.

Complément

Voici une autre version alternative qui se base par rapport au nom de l'OS, en supprimant tous les chaines inutiles telles que professionnel, standard, enterprise, etc.

Dim winOS
winOS = LCase(GetObject("winmgmts:root\cimv2:Win32_OperatingSystem=@").Caption)
winOs = Replace(winOs,"professionnel","")
winOs = Replace(winOs,"microsoft","")
winOs = Replace(winOs,"home","")
winOs = Replace(winOs,"standard","")
winOs = Replace(winOs,"enterprise","")
winOs = Replace(winOs,"r2","")
winOS = Trim(WinOs)
If winOS = "windows 7" Then
 WScript.Echo "Windows 7 reconnu!"
ElseIf winOS = "windows server 2008" Then
 WScript.Echo "Windows Server reconnu!"
ElseIf winOS = "windows server 2008" Then 
 WScript.Echo "Windows Server 2012 reconnu!"
Else
 WScript.Echo "OS inconnu:" + winOS
End If

A vous d'adapter suivant vos besoins.

Conclusion

Oui ça fonctionne bien que ce ne soit pas l'idéal d'avoir un script en dur, il vaut mieux privilégier des GPO en fonction de containers des machines (ou requête WMI). Vous pouvez aussi préférer baser la détection sur un groupe Active Directory.

J'ai publié ce billet car j'ai eu besoin de faire cette bidouille dans un contexte particulier, libre à vous de vous en inspirer, de l'améliorer ou de le transposer et bien sûr de le partager.

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter