14 Sep 2015, 00:00

Accéder à un partage WebDAV avec l'explorateur windows

Windows supporte l’accès aux partages WebDAV via Explorer, à condition que le service WebClient soit démarré. ce dernier est par défaut en mode manuel, et ne démarre pas lorsque l’on fait appel à un url WebDAV. Il faut donc le passer en automatique, et le démarrer à la main si on ne souhaite pas redémarrer.

Il est conseillé d’aller dans le Panneau de Configuration, dans les “Options internet”, onglet “Connexions” puis “Paramètres LAN” et de désactiver la detection automatique de la connexion. En effet, celle-ci attend un timeout de la detection d’un proxy à chaque requête WebDAV, ce qui ralentit énormément la connexion.

Ensuite, nous pouvons accéder à une URL type \\webdav.monserveur.com[@SSL][@80]\mon\dossier\partage ou encore http[s]://webdav.monserveur.com/mon/dossier/partage[:80]. Les caractères entre crochets sont à spécifier si l’on souhaite utiliser une connexion HTTPS sécurisée. De même, il est possible de spécifier un numéro de port non standard.

On peut également le conecter en tant que lecteur réseau. Si l’on coche “Mémoriser les informations d’identification”, le nom d’utilisateur sera conservé, mais pas le mot de passe, qu’il faudra malgré tout entrer à chaque ouverture de session.

Par défaut, Windows n’autorise pas le téléchargement de fichiers de plus d’une certaine taille (un fichier de 60Mo n’est pas passé). Il faut pour cela aller à la clé de registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters, et passer la valeur ‘FileSizeLimitInBytes’ à 4294967295 (source)

On peut également créer un batch qui permet de libérer une lettre de lecteur et de l’assigner au partage, comme ceci :

net use Z: /delete
net use Z: \\webdav.monserveur.com@SSL\mon\dossier\partage /user:monUser

27 Mar 2015, 00:00

Verrouiller automatiquement une session lors de son ouverture sous Windows 7

On peut vouloir, pour diverses raisons, ouvrir une session automatiquement au démarrage de la machine, mais la verrouiller aussitôt. Pour ceci, il suffit de créer un fichier sessionLock.bat, qui contiendra cette unique ligne :

rundll32 user32.dll,LockWorkStation

Placer un raccourci vers ce fichier dans le dossier de démarrage de la session, et hop ! Lorsque la session s’ouvre, elle est immédiatement verrouillée.

28 Jan 2015, 00:00

Créer une clé USB d'install de Windows 8.1 Pro|Core 64 bits, compatible Bios (MBR) et UEFI (GPT)

Pour commencer, il y a besoin d’une clé USB 8Go (ou + ), table de partition MBR, et 1 partition formatée en FAT32. Positionner le flag “boot”, mais pas besoin de positionner le flag “esp”.

Copier/coller tous les fichiers de l’ISO de Windows 8 sur la clé. Il est possible de récupérer les isos chez Microsoft . Vérifier le checksum des fichiers.

L’image telle quelle est directement bootable en UEFI. Mais elle n’installera que la version pour laquelle elle est prévue (Core ou Pro). Pour permettre le choix, ajouter dans le dosssier \Sources le fichier ei.cfg structuré tel quel :

[EditionID]

[Channel]
Retail

[VL]
0

Ensuite, il va falloir la rendre bootable en mode BIOS. Pour ceci, brancher la clé sur un Windows 64 bits, et lancer un terminal en administrateur, puis rentrer la ligne ci-dessous, en remplacant X par la lettre de la clé

X:\boot\bootsect.exe /nt60 X: /mbr

14 May 2014, 00:00

Afficher les Propriétés du serveur d'impression sous 7 et 8 sans imprimante d'installée

Cette boite de dialogue, sous 7 et 8, n’est accessible par clic que via la barre d’actions en haut de l’Explorer, lorsqu’une imprimante est sélectionnée. Si on n’a pas d’imprimante, on ne peut pas.

Il suffit donc de lancer la commande printui /s Le commutateur /s sert à lancer l’interface graphique. Sans lui, on gère tout en ligne de commande.

14 May 2014, 00:00

Executer un processus en tant qu'utilisateur System sous Windows 8 (et probablement Vista et 7)

Parfois, bien que l’on éxécute un programme en tant qu’administrateur de l’ordinateur, on peut se retrouver avec certaines restrictions. Par exemple si l’on veut modifier les lés du registre à HKLM\System\CurrentControlSet\Enum . Pour contourner ceci, on peut lancer l’utilisatire PsExec de Sysinternals, avec les options -i qui permet que le programme soit lancé interactivement sur le bureau de l’utilisateur, et -s qui demande à utiliser le compte system.

Par exemple,

C:\Users\moi\path\vers\psexec.exe -i -s regedit

permettra de modifier le registre à notre guise. À noter qu’il faut lancer la commande dans un shell cmd lancé avec les droits administrateur.

Cette info a été trouvée grâce à ces posts, bien utiles malgré un langage aussi fleuri qu’une sépulture d’ancien combattant un 8 mai.

14 May 2014, 00:00

Supprimer une imprimante fantome sous Windows 7 et 8

Il peut arriver qu’une imprimante ne soit pas supprimable dans le gestionnaire d’imprimantes. Plus d’infos ici : Problème d’installation d’imprimantes dans Windows 7

Imprimante locale

Dans le cas d’une imprimante locale, il s’agit le plus souvent d’une file d’attente qui ne veut pas se vider. Or il est impossible de supprimer une imprimante dont la file d’attente n’est pas vide. Pour forcer le vidage de la file d’attente :

  • couper le service spouleur d’impression, soit par l’interface graphique (services.msc), soit avec la commande net stop spooler
  • supprimer tous les éléments du dossier C:\Windows\System32\spool\PRINTERS\
  • relancer le service Spouleur d’impression (net start spooler)

Les files d’attente doivent être vides, et les imprimantes peuvent être supprimées.

Imprimante réseau

Dans le cas d’une imprimante réseau, ce peut être un peu plus compliqué. Il arrive qu’une imprimante réseau, même avec une file d’attente vide, ne puisse être supprimée. Ceci est particulièrement vrai lors d’une imprimante déployée automatiquement par une GPO (mal) appliquée à un domaine.

Sous 7

Sous 7, il suffit généralement d’aller dans la base de registre, d’aller à la clé HKCU\Printers\Connections et de supprimer la clé correspondant à l’imprimante récalcitrante. Un coup de redémarrage de Spouleur d’impression (voir ci-dessus) et c’est réglé, elle n’apparaît plus.

Sous 8

Sous Windows 8, bien que cette clé existe aussi, ce n’est pas elle qui contrôle l’existence des imprimantes. Il faut aller éditer la base de registre en tant qu’utilisateur System (voir ce post), et aller à la clé HKLM\SYSTEM\CurrentControlSet\Enum\SWD\PRINTENUM\, trouver la ou les clés des imprimantes à supprimer (via la valeur FriendlyName), et les supprimer. Si les connexions automatiques via GPO aux imprimantes partagées sont à refaire au propre, il faut redémarrer l’ordinateur, puis réappliquer la commande gpupdate /force.

Normalement, cela devrait suffire. Si l’on souhaire effacer toutes les traces de l’imprimantes dans le registre, voilà les différents emplacements mentionnant une imprimante partagée dans le registre. Notez que je mentionne HKCU pour l’utilisateur concerné, mais que si regedit est lancé via psexec, il faudra aller chercher dans HKU\SID.

  • HKCU\Printers\Connections

  • HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices\

  • HKCU\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts\

  • HKCU\Software\Policies\Microsoft\Windows NT\Printers\PushedPrinterConnectionStore\{XXXXX-XXX-XXX....XXXX}\

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\SID\Printers\Connections\

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\Servers\SERVEUR-D-IMPRESSION-DU-DOMAINE\

  • HKLM\SYSTEM\CurrentControlSet\Enum\SWD\PRINTENUM\

Penser à redémarrer la machine après ces manips, et éventuellement à réappliquer la commande gpupdate /force.

20 Apr 2014, 00:00

Boucle pour appliquer un script à tous les utilisateurs d'un domaine

Si l’on souhaite appliquer un script à tous les utilisateurs d’un domaine, il faut commencer par générer la liste de tous ces utilisateurs. Ceci peut se faire via la commande powershell

dsquery user -o samid -limit 250 > C:\path\to\domainUsers.txt

qui va lister tous les utilisateurs du domaine, sous la forme SAM ID (nom raccourci), entourés de guillemets. L’otion -limit est facultative, mais par défaut dsquery ne liste que les 100 premières entrées (soit -limit 100).

Puis on éxecute le script suivant

@echo off

REM on parcourt le fichier domainUsers.txt et on passe chaque ligne en argument
for /f "delims=" %%i in ('type C:\path\to\domainUsers.txt') do (C:\path\to\myScript.bat %%i)

Il faudra penser, dans le script, lorsque l’on souhaite récupérer le paramètre, à utiliser %~1 et non %1, ce qui permet de prendre la valeur sans les guillemets.

20 Apr 2014, 00:00

Création d'un répertoire qui contiendra des dossiers privés d'utilisateurs d'un poste ou domaine

Le but de la manipulation est que des utilisateurs désignés d’un poste ou d’un domaine aient chacun un dossier qui leur est privé (accessible uniquement à eux-seuls, en dehors bien sur des administrateurs). Ces dossiers seront également accessibles par le réseau, avec les mêmes limitations. Ces dossiers seront tous situés dans un même dossier racine, qui ne sera même pas navigable par de simples utilisateurs pour éviter qu’ils ne voient les noms des autres utilisateurs ou encore ceux qui ont un dossier personnel.

Commencer par créer le dossier partagé en question. Dans mon exemple ce sera "C:\Dossiers Perso\". Editer les permissions, désactiver l’héritage et conserver les autorisations en tant qu’autorisations explicites. Puis supprimer toutes les permissions relatives aux Utilisateurs, Utilsateurs authentifiés ou Utilisateurs du domaine (ne laisser que des droits aux Administrateurs, en somme).

Aller dans l’onglet de partage du dossier, aller dans le partage avancé, partager le dossier avec le nom que vous souhaitez, et dans les autorisations, donner le controle total à tout le monde. Le faire dans l’onglet de partage simple donnera les mêmes autorisations ACL sur le dossier (ce que nous ne voulons pas), mais dans l’onglet avancé non. Le partage est donc en lecture/écriture à tout le monde, mais en réalité, les ACL du dossier refuseront l’accès.

Puis exécuter le script suivant, en prenant soin de modifier les chemins : (NOTE : il est conseillé de créer un document vierge, de l’enregistrer au format CP850 (ou OEM850 sous Notepad++) puis d’y coller le contenu ; ceci reglera les problèmes d’accès, notamment pour Invité) @echo off REM on supprime l’affichage des commandes

REM on définit le chemin du dossier racine
REM Ne pas mettre de guillemets meme s'il y'a des espaces
REM ils sont ajoutés dans le suite du script. Ne pas mettre l'antislash final
set privateFolderPath=F:\Dossiers Perso

REM Si il y a un argument à la commande on le récupère (sans guillemets, d'ou le %~1) au lieu de %1, sinon on le demande
if not "%~1"=="" (set user=%~1) else (set /p user="Nom de l'utilisateur dont il faut creer le dossier perso ? ")

REM on zappe l'utilisateur invité
REM le nom bizarre vient de la différence d'encodage : CP850 par défaut pour le batch
if %user% == Invité (
	echo On zappe l'utilisateur Invité
	goto :eof
)

REM on teste l'existence de l'utilisateur avec des espaces autour
REM pour être sûr que ce n'est pas juste un bout du nom qui a été trouvé
REM rajouter le commutateur /domain après Net User pour vérifier sur tout le domaine
net user | findstr /i /C:" %user% "
if errorlevel 1 (
	REM s'il est en début de ligne, il n'y a pas d'espace devant. On vérifie
	net user | findstr /i /B /C:"%user% " > NUL
	if errorlevel 1 (
	    echo Cet utilisateur n'existe pas
	    goto :eof
	)
)

REM S'il n'y a ni dossier ni fichier sur la destination
if not exist "%privateFolderPath%\%user%" (
	REM on crée le dossier
	mkdir "%privateFolderPath%\%user%"
) else (
	REM si il n'y a pas de fichier "." dedans, c'est que c'est un fichier
	if not exist "%privateFolderPath%\%user%\*.*" (
	    echo Attention, "%privateFolderPath%\%user%" est un fichier !
	    pause
	    goto :eof
	)
)

REM On met l'utilisateur en propriétaire et on lui donne le controle total
REM l'utilisation de (OI) et (CI) équivaut à choisir en graphique
REM que les droits s'appliquent à "ce dossier, les sous-dossiers et les fichiers"
icacls "%privateFolderPath%\%user%" /setowner %user% /Q /T
icacls "%privateFolderPath%\%user%" /grant %user%:(OI)F /Q
icacls "%privateFolderPath%\%user%" /grant %user%:(CI)F /Q

Et voilà ! Le dossier de l’utilisateur est créé, il en est propriétaire, et il a (au même titre que les Administrateurs, par l’héritage) le contrôle total dessus. Et aucun utilisateur sans privilège ne peut naviguer son dossier (ni même le dossier "C:\Dossiers Perso" directement). Il peut y accéder en allant directement à "C:\Dossiers Perso\user" ou encore à \\IP_OU_NOM_SERVEUR\Dossiers Perso\user .

Si on souhaite appliquer ce script à tous les utilisateurs d’un domaine, se référer à ce post.

20 Apr 2014, 00:00

Partage réseau propre à chaque utilisateur avec montage automatique sous Server 2012

Le but de la manoeuvre est de monter automatiquement, au démarrage d’une session, un lecteur réseau propre à l’utilisateur actuel. Dans le contexte, cet article fait suite à celui permettant de créer un dossier personnel privé aux utilisateurs d’un domaine.

Je pars du principe que chaque utilisateur a son dossier privé, créé sous le partage \\IP_SERVEUR\Perso$\%username%
Ce post est (très) inspiré de ce post.

Créer, sur un dossier de votre choix, le script suivant avec l’extension .vbs (après l’avoir adapté à vos besoins) : Option Explicit

Dim objNetwork, WshNetworkName
Set objNetwork = CreateObject("WScript.Network")
Set WSHNetworkName = CreateObject("Shell.Application" )

Dim strUser, strHomeFolder, strHomeUserPath, strHomeUserDriveLetter
strHomeUserPath = "\\IP_NOM_SERVEUR\Perso$\"
strHomeUserDriveLetter = "Q:"

'récup du login
strUser = objNetwork.UserName
'chemin réseau complet du répertoire perso de l'utilisateur
strHomeFolder = strHomeUserPath & strUser

Dim CheckDrive, AlreadyConnected, intDrive
Set CheckDrive = objNetwork.EnumNetworkDrives()
On Error Resume Next
AlreadyConnected = False
For intDrive = 0 To CheckDrive.Count - 1

'Si un lecteur réseau est déjà mappé sur la lettre que l'on souhaite utiliser
	If CheckDrive.Item(intDrive) = strHomeUserDriveLetter Then AlreadyConnected = True
	If AlreadyConnected = True then
		objNetwork.RemoveNetworkDrive strHomeUserDriveLetter, True, True
		'objNetwork.RemoveNetworkDrive , True, True
		End if
	Next
	objNetwork.MapNetworkDrive strHomeUserDriveLetter, strHomeFolder
	WshNetworkName.NameSpace(strHomeUserDriveLetter).Self.Name = "Dossier Perso"
	WScript.Quit

Aller dans les stratégies de groupe (gpedit.msc pour le poste local, gpmc.msc pour les stratégies d’un domaine), aller sous Configuration Utilisateur |->Stratégies |->Paramètres Windows |->Scripts Cliquer sur Ajouter. Dans la boite de dialogue, cliquer sur “Afficher les fichiers”, ce qui nous amène directement à l’emplacement partagé prévu pour les scripts d’ouverture de session, qui ressemble à \\domain.com\SYSVOL\Petri.local\Policies\{E4A62379-8423-4654-8DB6-01FB8F58582D}\User\Scripts\Logon

Bien que nous puissions utiliser n’importe quel répertoire partagé, celui-ci est prévu pour, et le chemin réseau sera repris automatiquement par tous les clients. Coller le script ci-dessus sous n’importe quel nom dans ce répertoire, avec l’extension .vbs, par exemple mountPersonalFolder.vbs . Puis dans la boite de dialogue précédente, cliquer sur “Ajouter” et sélectionner le fichier.

Et voilà. Il sera automatiquement transmis chez les clients lorsque ceux-ci actualiseront leurs GPO.

12 Apr 2014, 00:00

Autoriser le Bureau à distance sous Windows Serveur 2012

Avant toute chose, ceci ne traite pas du tout de la configuration du gestionnaire de licence des services Bureau à distance de windows server, ni de leur aspect légal, mais purement de l’aspect technique.

Si l’on souhaite autoriser un utilisateur non-administrateur à se connecter au Bureau à distance sur un Windows Server 2012, il faut procéder à 3 étapes complémentaires :

  • Tout d’abord, vérifier dans les Paramètres système avancés (clic droit sur le Poste de travail, puis Propriétés, puis sélectionner Paramètres système avancés sur le côté), dans l’onglet Utilisation à distance, que les connections à distances sont autorisées sur cet ordinateur. Si ce n’est pas le cas, les activer.

  • Cliquer sur le bouton Sélectionner des utilisateurs, et ajouter le/les utilisateurs/groupes qui auront le droit de se connecter. Ceci a pour effet de placer l’utilisateur/groupe dans le groupe “Utilisateurs du Bureau à distance”. Ceci est visible dans le profil concerné, dans la gestion des utilisateurs et ordinateurs AD. Utiliser le menu “Séléctionnez des utilisateurs” et le composant Utilisateurs et Ordinateurs Active Directory revient exactement au même. Tout ajout/suppression dans l’un sera effectif dans l’autre.

  • Ces personnes désormais ont le droit d’utiliser le protocole RDP, mais n’ont pas le droit d’ouvrir une session sur la machine pour autant. Pour remédier à ceci, il faut aller dans les stratégies locales du serveur, avec la commande gpedit.msc

Puis aller dans : Paramètres ordinateur |-Paramètres Windows |-Paramètres de sécurité |-Stratégies locales |-Attribution de droits utilisateurs

Et remplir la valeur “Autoriser l’ouverture de session par les services Bureau à distance” en conséquence.

Attention. Si on modifie ce paramètres dans les GPO du domaine entier, il sera appliqué à toutes les machines, et surtout le paramètre local par défaut (Administrateurs) sera remplacé par le nouveau paramètre de domaine. Il faut penser à rajouter le groupe Administrateurs si on souhaite qu’ils conservent un accès à distance.