Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Importation d’un fichier type csv dans un fichier excel en powershell

 

Nous allons ici convertir un fichier csv en fichier excel en powershell.

Nous allons pour cela nous servir des objets COM fournit lors de l’installation de excel :

Initialisons notre variable

$Excel = New-Object -ComObject excel.application

Maintenant nous allons rendre visible chaque étapes effectué par nos lignes de commandes dans Excel.

$Excel.visible = $true

Une fenêtre Excel s’est ouverte

image 

Nous importons notre fichier type csv (séparation par des virgules)

$csv=import-csv "C:\Users\ato\Downloads\export.txt" -header site,ptr

image

Maintenant, nous ajoutons un nouveau classeur

$workbook = $Excel.workbooks.add()

image

Nous allons maintenant rajouter les en têtes de nos colonnes dans le fichier excel

$excel.cells.item(1,1) = "site"

$excel.cells.item(1,2) = "PTR"

On peut voir apparaitre les valeurs dans notre fichier excel

image

On définit notre compteur à 2 permettant d’ajouter les valeurs de notre csv dans les colonnes site et ptr précédemment ajouté.

$i=2

On va maintenant récupérer les valeurs de notre fichier type csv et les ajouter a notre fichier excel

foreach  ($s in $csv)
{
    $excel.cells.item($i,1)=$s.site
    $excel.cells.item($i,2) = $s.ptr
    $i++
}

image

Récupération d’attributs utilisateurs dans un tableau en powershell

 

Dans cet exemple nous allons voir comment récupérer l’UPN, le SAN et le profilepath des utilisateurs d’un groupe dans l’ad courant que nous allons ensuite placer dans un tableau.

Tout d’abord, connectons nous au domaine courant et indexons notre variable de recherche

$domain=[ADSI] »
$search=New-Object system.directoryservices.directorysearcher($domain)

Maintenant, nous allons nous connecter au groupe sur lequel nous allons récupérer les membres

$GRP= "GroupTest"
$search.filter="(&(objectClass=Group)(name=$GRP))"
$group=$search.findone()

Initialisons notre variable contenant notre tableau

$tab=@()

Maintenant pour chaque membres du groupe, nous récupérons à tour de rôle dans des variables l’upn, le profilepath et le SamAccountName.

foreach ($user in $group.properties.member)
{
    $searchUser=New-Object system.directoryservices.directorysearcher($domain)
    $searchUser.filter="(&(objectclass=user)(distinguishedname=$user))"
    $Upn=$SearchUser.findone().properties.userprincipalname
    $profilepath=$SearchUser.findone().properties.profilepath
    $sam=$SearchUser.findone().properties.samaccountname
}

 

Pour chacune des valeurs récupérés, nous allons les placer dans un tableau.

Pour créer un tableau, nous allons initier un objet de type PsObject dans une variable

$line=new-object psobject

Ensuite, il suffit d’ajouter à cette variable un membre contenant le nom de notre tableau et la valeur

Ajout colonne UPN

$line | Add-Member -Name UPN -MemberType NoteProperty -Value ""

image

Ajout colonne SAN

$line | Add-Member -Name SAN -MemberType NoteProperty -Value ""

image 

Ajout colonne ProfilePath

$line | Add-Member -Name ProfilePath -MemberType NoteProperty -Value ""

image

Pour finir, nous ajoutons notre variable $line à notre variable tableau $tab

$tab+=$line

image

 

Maintenant nous allons compléter le contenu de notre boucle afin que chacune des valeurs récupérés soit placé dans notre tableau

foreach ($user in $group.properties.member)
{
    $line=new-object psobject; $user="$user"
    $searchUser=New-Object system.directoryservices.directorysearcher($domain)
    $searchUser.filter="(&(objectclass=user)(distinguishedname=$user))"
    $Upn=$SearchUser.findone().properties.userprincipalname
    $profilepath=$SearchUser.findone().properties.profilepath
    $sam=$SearchUser.findone().properties.samaccountname
   $line | Add-Member -Name UPN -MemberType NoteProperty -Value"$upn"
    $line | Add-Member -Name SamAccountName -MemberType NoteProperty -Value "$sam"
    $line | Add-Member -Name ProfilePath -MemberType NoteProperty -Value "$profilepath"
    $tab+=$line

}

Ce qui donne :

image

Remettre via le registre le chemin par défaut de l’ost sous Outook 2007

 

Après une migration du profil utilisateur,si la valeur de l’emplacement de l’ost sous Outlook 2007 empêche l’ouverture du client de messagerie, celle ci peut être remis par défaut via le registre.

Pour cela, il faut supprimer l’entrée 001f6610 dans la clé suivante :

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\%username%\13dbb0c8aa05101a9bb000aa002fc45a

Une fois celle ci supprimée, le client Outlook régénèrera son OST dans l’emplacement par défaut.

Exemple pour exclure cette clé en utilisant USMT.

<unconditionalExclude>

<objectSet>        

<pattern type="Registry">HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\*\13dbb0c8aa05101a9bb000aa002fc45a [001f6610]</pattern>
          

</objectSet>
</unconditionalExclude>