Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Désactivation de la recherche de profil supprimé dans USMT

Lors de l’utilisation de scanstate (outil USMT), il se peut que vous ayez des problèmes d’accès sur certains profils. Cela peut se produire quand un profil sur l’ordinateur n’a pas été supprimé proprement.

Par exemple un profil utilisateur a été supprimé depuis l’explorateur et non depuis les paramètres système avancés è Profil des utilisateurs .

Dès que cela se produit, le mécanisme par défaut de USMT tente sous 20 reprises de charger le NTUSER.dat de ce profil non trouvé.

image

Cela a pour cause de prolonger le temps de traitement de scanstate.

Pour désactiver les tentatives répétés d’accès à des profils supprimé, une variable peut être définit : MIG_IGNORE_PROFILE_MISSING

Il suffit de définir cette variable à 1 et l’outil Scanstate ne tentera plus d’accéder de manière répété aux profils absent : SET MIG_IGNORE_PROFILE_MISSING=1

Affecter dynamiquement une lettre de disk drive disponible dans un script Powershell

 

Imaginons que vous deviez effectuer un net use dans un script sur plusieurs machines mais que les disks drive disponible ne soit pas les mêmes. Pour cela, nous allons consulter le registre.

Dans le registre, chaque disk drive monté apparait dans HKCU\Network

Exemple :

Un net use

image

Sous le registre

image

 

Avec la cmdlet Get-Random, nous pouvons emprunter une lettre pour un disk drive aléatoire et voir si la clé dans le registre au niveau de HKCU\network est retrouvé par notre valeur obtenu du Get-Random . Si cela n’est pas le cas, cela veut dire que la lettre est disponible pour notre disk drive.

 

Récupérer une lettre disponible dans une variable

Pour notre cmdlet get-random, nous définissons une collection de valeur allant de o à z.

Pour chaque valeur obtenue, nous allons vérifier si la clé correpondante dans le registre sous HKCU\Network existe. La variable récupérera donc une valeur qu’il comparera au registre.

do {$MapDest=get-random -input "o","p","q","r","s","t","u","v","w","x","y","z"; get-childitem "registry::HKEY_CURRENT_USER\Network\$MapDest"; $check=$?} while ($check -eq "true")

Notre variable a maintenant une lettre de lecteur disponible pour un mappage de lecteur réseau. Il ne reste plus qu’à ajouter à notre variable $MapDest le caractere “:”

$MapDest=("$MapDest :").replace(" ","")

La variable peut maintenant être utilisé pour un mappage : net use $MapDest \\path

Authentification avec prise en charge des fournisseurs installés avec Windows PowerShell

La commande get-credential obtient un objet credential (informations d’identification) basé sur le nom et mot de passe d’un utilisateur.

Cependant, cette commande est incompatible avec les fournisseurs installés avec Windows Powershell.

Exemple d’une copie de fichier sans crédential

clip_image002

Maintenant, essayons en spécifiant un utilisateur.

clip_image004

image

clip_image008

On peut donc voir que le fournisseur n’est pas compatible en définissant un crédential.

Maintenant, nous allons voir comment permettre une authentification via le module impersonation disponible à cette adresse : http://poshcode.org/get/1867

Cette astuce devra être exécuté avec Powershell en mode STA : Single-Threaded Apartments car le module que nous allons importer n’est compatible que dans ce mode.

Exécuter :

clip_image010

(En mode STA, la fenêtre Powershell est noir par défaut)

clip_image012

Maintenant on récupère notre variable d’authentification comme auparavant.

clip_image014

Si on exécute une copie de fichier avec la variable $cred, on peut voir que cela ne fonctionne toujours pas.

clip_image016

Maintenant, on va importer le module « impersonation » qui va mettre à notre disposition trois nouvelles commandlets.

clip_image018

A l’aide de Push-ImpersonationContext, on va maintenant récupérer notre variable $cred. Et à partir de là, on peut réessayer une copie de fichier qui auparavant ne fonctionnait pas.

clip_image020

Cela fonctionne désormais.

Pour effacer de la mémoire l’authentification, nous avons la variable Pop-impersonationContext disponible.

Exemple :

Nous supprimons le fichier copié là où celui-ci a fonctionné auparavant et nous utilisons la cmdlet Pop-impersonationContext. Nous réessayons donc une nouvelle fois notre copie de fichier :

clip_image022

Cela a bien supprimé l’authentification gardé en mémoire.

Autre exemple d’authentification pour la création d’un item  (même principe):

clip_image024