Question Croiser données AD / Exchange

Plus d'informations
il y a 10 ans 3 mois #21411 par Marco_FR
Bonjour,

Je ne sais pas s'il est possible d'avoir au sein d'un object le résultat de plusieurs variable.

Ce que je souhaite faire, c'est récupérer des informations sur un compte de l'AD.
Puis de récupérer des informations sur ce même compte mais sur Exchange.

Pour pouvoir ensuite les comparer plus facilement.


[code:1]$USER = @(Import-Csv -Delimiter \";\" \"inactifs_user-201509.csv\" -Encoding UTF8) # Import du fichier des comptes supposés être inactifs
$Date = (get-date).AddMonths(-4) # Date d'inactivité
$USER2 = $USER # Variable pour Exchange

$AdUserInfo = foreach ( $USER in $USER ) {
@(Get-ADUser -Identity $USER.SAMAccountName -Properties WhenCreated, LastLogonDate, Title, Description, LastLogonTimeStamp |
Where { ($_.LastLogonDate -lt $Date) -and ( $_.WhenCreated -lt $date) } |
select Title, Description, LastLogonDate, WhenCreated, GivenName, Surname, DistinguishedName )
}

$MailUserInfo = foreach ( $USER2 in $USER2 ) {
@(get-mailbox -identity $USER2.SAMAccountName | where { $_.WhenCreated -lt $date } |
get-mailboxStatistics | where { $_.LastLogonTime -lt $date } | select DisplayName, LastLogonTime, LastLoggedOnUserAccount)
}
$MailUserInfo[/code:1]

Mais je ne sais pas comment je pourrais avoir ce résultat :
$AdUserInfo.Title;$AdUserInfo.Description;$AdUserInfo.LastLogonDate;$AdUserInfo.WhenCreated;$AdUserInfo.GivenName;$AdUserInfo.Surname;$AdUserInfo.DistinguishedName;$MailUserInfo.DisplayName;$MailUserInfo.LastLogonTime;$MailUserInfo.LastLoggedOnUserAccount

Par Avance merci de votre aide.
Bonne journée à tous

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

Plus d'informations
il y a 10 ans 3 mois #21413 par NicolasBdn
Bonjour,

J'ai noté une erreur au niveau de la boucle foreach.

[code:1]$AdUserInfo = foreach ( $USER in $USER ) [/code:1]

Tu ne peux faire appel à un même nom de variable pour chaque itération de ton objet primaire.
Explication: foreach (<itération> in <objet primaire> )

Personnellement je m'amuses à jouer avec les noms pluriel quand j'utilise le foreach.
Ex: foreach ($user in $userS)

J'espère t'avoir aidé.

Si jamais cela ne suffit pas. Tu peux utiliser la seconde forme du foreach.
[code:1]$AdUserInfo = $USER | foreach {
Get-ADUser -Identity $_.SAMAccountName
}
[/code:1]
Voilà.

Bon courage.


Message édité par: NicolasB, à: 26/01/16 16:41<br><br>Message édité par: NicolasB, à: 26/01/16 16:44

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

Plus d'informations
il y a 10 ans 3 mois #21414 par xyz
Réponse de xyz sur le sujet Re:Croiser données AD / Exchange
Salut,
Marco_Po écrit:

Je ne sais pas s'il est possible d'avoir au sein d'un object le résultat de plusieurs variable.

C'est possible, une piste .
Ou + simple :
[code:1]
$A=New-object PSObject -Property @{P1=1;P2=2}
$B=New-object PSObject -Property @{P1=\&quot;deux\&quot;;P2='Trois'}
$C=New-object PSObject -Property @{P1=$A.p1;P2=$A.p1;P3=$B.p1;P4=$B.p2}
$C
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 3 mois #21415 par Marco_FR
Réponse de Marco_FR sur le sujet Re:Croiser données AD / Exchange
Merci pour vos réponses.

Nicolas:
Le problème de ma boucle c'est que si elle n'est pas comme je l'ai écris, la boucle foreach ne fonctionne pas.
Elle fonctionne avec un -process.

Laurent:

Je vais tester comme tu me le proposes.

Mais j'ai trouvé des pistes aussi et j'ai changé mon script qui ressemble à ça. Mais pour plus de visibilité il faut que je change des choses...

[code:1]$USER = @(Import-Csv -Delimiter \&quot;;\&quot; \&quot;inactifs_user-201509.csv\&quot; -Encoding UTF8) # Import du fichier des comptes inactifs
$Date = (get-date).AddMonths(-4) # Date d'inactivité
$delimeter = \&quot;;\&quot;


$UserInfoExchange = \&quot; \&quot;
$UserInfoAD = \&quot; \&quot;

$UserInfo = foreach ( $USER in $USER ) {

$InfoUser = @(Get-ADUser -Identity $USER.SAMAccountName -Properties WhenCreated, LastLogonDate, Title, Description, LastLogonTimeStamp, GivenName, Surname, Displayname | Where { ($_.LastLogonDate -lt $Date) -and ( $_.WhenCreated -lt $date) } | select WhenCreated, LastLogonDate, Title, Description, GivenName, Surname, SamAccountName, Displayname)

# Creation des attributs AD
[string]$UserInfoWhenCreated = $InfoUser.WhenCreated
[string]$UserInfoLastLogonDate = $InfoUser.LastLogonDate
$UserInfoTitle = $InfoUser.Title
$UserInfoDescription = $InfoUser.Description
$UserInfoGivenName = $InfoUser.GivenName
$UserInfoSurname = $InfoUser.Surname
$UserInfoSamAccountName = $InfoUser.SamAccountName
$UserInfoDisplayName = $InfoUser.DisplayName
$UserInfoAD = $UserInfoWhenCreated + $delimeter + $UserInfoLastLogonDate + $delimeter + $UserInfoTitle + $delimeter + $UserInfoDescription + $delimeter + $UserInfoGivenName + $delimeter + $UserInfoSurname + $delimeter + $UserInfoSamAccountName + $delimeter + $UserInfoDisplayName


$InfoExchange = @(get-mailbox -identity $USER.SAMAccountName | where { $_.WhenCreated -lt $date } |
get-mailboxStatistics | where { $_.LastLogonTime -lt $date } | select DisplayName, LastLogonTime, LastLoggedOnUserAccount)

# Creation des attributs Exchange
$UserExcDisplayName = $InfoExchange.displayname
[string]$UserExcLastLogonTime = $InfoExchange.lastlogontime
$UserExcLastLoggedOnUserAccount = $InfoExchange.lastloggedonuseraccount

$UserInfoExchange = $UserExcDisplayName + $delimeter + $UserExcLastLogonTime + $delimeter + $UserExcLastLoggedOnUserAccount

# Concatenation des deux elements
$UserInfoAdExc = $UserInfoAD + $delimeter + $UserInfoExchange

Write-Host $UserInfoAdExc
}[/code:1]

Merci à tout les deux pour votre temps et réponses. ;)

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

Plus d'informations
il y a 10 ans 3 mois #21421 par xyz
Réponse de xyz sur le sujet Re:Croiser données AD / Exchange
Une idée pour alléger ton code :
[code:1]
$P=Get-Process -name Powershell

$delimeter = \&quot;;\&quot;

[string[]]$Tab=@(
$P.Name
$P.Handles
$P.Path
$P.FileVersion
)
#$OFS=Séparateur d'élément de tableau
$Ofs=$delimeter

#Conversion PS d'1 tableau en une string
$Info=\&quot;$Tab\&quot;
$Info

#ou encore
$Ofs=\&quot;'$delimeter'\&quot;
$Info=\&quot;'$Tab'\&quot;
[/code:1]
Suppose des propriétés de type scalaire ou des objets implémentant la méthode ToString().

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 3 mois #21428 par Philippe
Réponse de Philippe sur le sujet Re:Croiser données AD / Exchange
Bonjour marco_po

pour que tu comprenne la remarque de Nicolas, je te propose de testé le script ci-dessous. je n'ai pris que trois ligne de ton code

tu a fais une erreur courante dans l'utilisation des boucle for :ohmy: mais qui va te bloqué rapidement

ce script te montrera que tu ne liste pas tous les utilisateurs de ton fichier inactifs_user-201509.csv si il y en plus 1 utilisateur bien sur ! ;)

[code:1]
$USER = @(Import-Csv -Delimiter \&quot;;\&quot; \&quot;inactifs_user-201509.csv\&quot; -Encoding UTF8) # Import du fichier des comptes inactifs

foreach ( $USER in $USER ) {
write-host $USER.SamAccountName
}

[/code:1]
ça affiche qu'un seul utilisateur !

si tu peux testé aussi celui-ci ou j'ai changé le nom de la variable qui contient la liste des utilisateurs inactifs :
[code:1]
$userS = @(Import-Csv -Delimiter \&quot;;\&quot; \&quot;inactifs_user-201509.csv\&quot; -Encoding UTF8) # Import du fichier des comptes inactifs

foreach ( $USER in $userS ) {
write-host $USER.SamAccountName
}

[/code:1]
ça va affiché la liste de tous les utilisateurs inactifs

pour ton problème initiale, je sais pas si ta réussi à le résoudre.
j'attend donc ta réponse !

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

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