Question Redirection d'un Get dans un tabeau

Plus d'informations
il y a 15 ans 2 mois #8506 par Butler
Bonjour,
Je débute vraiment en powershell et je ne suis pas un développeur même si j'aime bien ça :cheer:

Tout est dans le titre, je souhaite rediriger le contenu d'une requête effectuer sur l'AD dans un tableau.
Exemple de requête :

[code:1]$user = Get-QADUser * -AccountExpiresBefore $date_expire -AccountExpiresAfter $date_auj | Format-table Name, SamAccountName, accountExpires, email | out-String[/code:1]
j’obtiens donc :
[code:1]
Name SamAccountName AccountExpires Email
----


XXX CHDC 01/02/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
XXX1 GRNM 01/03/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
XXX2 xxxx 01/02/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
XXX3 TDRG 29/01/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
XXX4 CHUS 18/01/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
XXX5 BLYN 01/03/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
XXX6 RGEL 01/03/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
XXX8 DLTB 01/02/2011 00:00:00 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

[/code:1]
je pense avoir trouvé une piste avec system.array par exemple mais le fait que j'utilise GET-QADuser qui n'est pas natif de powershell me rend septique sur ce genre de post-traitement.

Message édité par: Butler, à: 5/01/11 11:51<br><br>Message édité par: Butler, à: 7/01/11 11:43

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 2 mois #8509 par blanc
bonsoir,
Sur le site des cmdlets wiki.powergui.org/index.php/Get-QADUser :
\&quot;The output of the cmdlet is a collection of objects, with each object representing one of the user accounts found by the cmdlet. You can pipe the output into another cmdlet\&quot;.
Une collection d'objets, c'est presque/comme un tableau.
[code:1]$userS = Get-QADUser
$userS | gm[/code:1]
devrait fournir le type des objets et de savoir si on peut faire des \&quot;cast\&quot; sur d'autres types.
Mais la collection est plus simple à manipuler dans le pipeline.
Avec un tableau, faut des trucs comme :
f[code:1]or ($i=0;$i -le 99;$i++) # ca fait année 1960
{
write-host userS.name
}
mais c'est aussi simple de faire :
foreach ($user in $userS) # ca fait année 2000
{
write-host $user.name
}[/code:1]
et le pipeline donne une autre dimension à la programmation (OO diraient certains)
[code:1]$userS | foreach {write-host $_.name} # ca fait année 2011[/code:1]

Pour mettre tous les \&quot;users\&quot; dans un tableau, peut être que :
[code:1]$userS | foreach {$tab=@($tab,$_)}
$tab | gm
$tab[0][/code:1]
Mais ca dépend du type initial de $userS.
Mais au fait, pourquoi un tableau? pour faire quoi avec?
Désolé de pas pouvoir en dire plus mais je n'ai pas les cmdlets de Quest.<br><br>Message édité par: Arnaud, à: 6/01/11 18:25

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 2 mois #8513 par Butler
Merci pour votre aide,
J'utilisais aussi le foreach mais mal.

[code:1]

#ajout de composants
Add-PSSnapin quest.activeroles.admanagement

# Sélection des comptes arrivant à expiration dans 4 jours
$date_auj = get-date -uformat \&quot;%d/%m/%y\&quot;
$date_expire = get-date -date ((get-date).AddDays(4)) -uformat \&quot;%d/%m/%y\&quot;

# Connexion à l'AD et récupération des utilisateurs
$connect = New-Object System.DirectoryServices.DirectoryEntry(\&quot;LDAP://dc=iegp,dc=edfgdf,dc=fr\&quot;«»)


# Filtre des utilisateurs suivant la date d'expiration des comptes
$objAD= Get-QADUser * -AccountExpiresBefore $date_expire -AccountExpiresAfter $date_auj
ForEach ($user in $objAD)
{
# Envoi à l'utilisateur de l'avertissement
# Mise en forme
$email = $($user.email)
$AccountExpires = $($user.AccountExpires)
$SamAccountName = $($user.SamAccountName)
Write-host $email $AccountExpires

$userTo_utilisateur = $email
$userfrom_utilisateur = \&quot;support-exploitation@XXX.fr\&quot;

$Sujet_utilisateur = \&quot;Désactivation de votre compte windows\&quot;
$body_utilisateur = \&quot;Votre compte $($SamAccountName) vous permettant l`'accès au réseau sera désactivé le : $($AccountExpires)`r Si votre compte doit être prolongé, pensez à en avertir l'exploitation par DTI\&quot;

$smtpserver = \&quot;172.20.1.238\&quot;

# Envoi
$encoding = [System.Text.Encoding]::UTF8
send-mailmessage -from $userfrom_utilisateur -to $userTo_utilisateur -subject $Sujet_utilisateur -body $body_utilisateur -smtpServer $smtpserver -Encoding $encoding
}

# Envoi du récapitulatif à Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

$user = Get-QADUser * -AccountExpiresBefore $date_expire -AccountExpiresAfter $date_auj | Format-table Name, SamAccountName, accountExpires, email | out-String
$user_detail = Get-QADUser * -AccountExpiresBefore $date_expire -AccountExpiresAfter $date_auj | Format-list Name, SamAccountName, accountExpires, email, DN | out-String


$userTo_exploit = \&quot;support-exploitation@cnieg.fr\&quot;
$userfrom_exploit = \&quot;support-exploitation@cnieg.fr\&quot;

$Sujet_exploit = \&quot;Liste des comptes AD arrivant à expiration : \&quot;
$corps_exploit = \&quot;Liste des comptes arrivant à expiration avant le $($date_expire) \&quot;

$body_exploit = $corps_exploit += $user += $user_detail
Write-Output $body_exploit
$smtpserver = \&quot;172.20.1.238\&quot;

$encoding = [System.Text.Encoding]::UTF8
send-mailmessage -from $userfrom_exploit -to $userTo_exploit -subject $Sujet_exploit -body $body_exploit -smtpServer $smtpserver -Encoding $encoding

# FIN
[/code:1]

Hormis le texte des emails, voilà mon script final. Il permet d'avertir et d'être avertie de l'expiration d'un compte de l'AD et donc de tout les droits sur les bases et applications rattacher à l'AD ..
Je souhaitai classer dans un tableau les éléments récupérer dans L'AD afin de minimiser le nombre de requête.
Finalement ta méthode est bien plus efficace, surtout «| gm » pour visualiser les méthodes et propriété est très utile .. :)
je débute vraiment en développement

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 2 mois #8515 par Arnaud Petitjean
Bonjour Butler,

Sois le/la bienvenu(e) dans le forum ;).

Pour trier un tableau ou une collection d'objet, tu as la commandelette Sort-Object qui est faite pour cela. Regarde l'aide de la commande, tu y trouveras plein d'exemples:

[code:1]Help Sort-Object -detailled[/code:1]

Sinon, dans le contexte de ton script, je pense que cela devrait faire ce que tu souhaites :

[code:1]$user = Get-QADUser * -AccountExpiresBefore $date_expire -AccountExpiresAfter $date_auj | Sort-Object -Property Name | Format-Table Name, SamAccountName, accountExpires, email | Out-String[/code:1]

Bon apprentissage :)

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 2 mois #8516 par Arnaud Petitjean
Bonjour Butler,

Sois le/la bienvenu(e) dans le forum ;).

Pour trier un tableau ou une collection d'objet, tu as la commandelette Sort-Object qui est faite pour cela. Regarde l'aide de la commande, tu y trouveras plein d'exemples:

[code:1]Help Sort-Object -detailled[/code:1]

Sinon, dans le contexte de ton script, je pense que cela devrait faire ce que tu souhaites :

[code:1]$user = Get-QADUser * -AccountExpiresBefore $date_expire -AccountExpiresAfter $date_auj | Sort-Object -Property Name | Format-Table Name, SamAccountName, accountExpires, email | Out-String[/code:1]

Bon apprentissage :)

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 2 mois #8520 par blanc
heuuuu, question de débutant :

pourquoi 3 fois la même requête ad : Get-QADUser * -AccountExpiresBefore $date_expire -AccountExpiresAfter $date_auj ?

N'est il pas possible de ré-employer $objAD pour le traitement des mèl vers le support?

quelque chose comme :
$user = $objAD | Format-table Name, SamAccountName, accountExpires, email | out-String

$user_detail = $objAD | Format-list Name, SamAccountName, accountExpires, email, DN | out-String

Les 2 sorties formatées ne pourraient-elles pas être obtenues comme ca :
[code:1]$objAD | Sort-Object -Property Name| foreach {
$user += $_ | Format-table Name, SamAccountName, accountExpires, email | out-String ;

$userdetail += $_ | Format-list Name, SamAccountName, accountExpires, email, DN | out-String
}[/code:1]
qui pourrait se lire comme ca : pour chaque objet de l'ad, on formate une table avec les 4 propriétés, table convertie en string que l'on concatène/mémorise dans une variable, idem pour la liste avec 5 propriétés.
(on vérifie le format de $user | gm car l'affichage est trompeur, il affiche toujours du texte même si on manipule des objets et il faut vraiment du texte pour le rapport).

Je me pose juste les questions car je n'ai pas d'ad.

Salutation.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.059 secondes
Propulsé par Kunena