Question
Croiser données AD / Exchange
- Marco_FR
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 10 ans 3 mois #21411
par Marco_FR
Croiser données AD / Exchange a été créé 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
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.
- NicolasBdn
-
- Hors Ligne
- Membre senior
-
il y a 10 ans 3 mois #21413
par NicolasBdn
Réponse de NicolasBdn sur le sujet Re:Croiser données AD / Exchange
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
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.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 3 mois #21414
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Croiser données AD / Exchange
Salut,
Marco_Po écrit:
Ou + simple :
[code:1]
$A=New-object PSObject -Property @{P1=1;P2=2}
$B=New-object PSObject -Property @{P1=\"deux\";P2='Trois'}
$C=New-object PSObject -Property @{P1=$A.p1;P2=$A.p1;P3=$B.p1;P4=$B.p2}
$C
[/code:1]
Marco_Po écrit:
C'est possible, une piste .Je ne sais pas s'il est possible d'avoir au sein d'un object le résultat de plusieurs variable.
Ou + simple :
[code:1]
$A=New-object PSObject -Property @{P1=1;P2=2}
$B=New-object PSObject -Property @{P1=\"deux\";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.
- Marco_FR
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
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 \";\" \"inactifs_user-201509.csv\" -Encoding UTF8) # Import du fichier des comptes inactifs
$Date = (get-date).AddMonths(-4) # Date d'inactivité
$delimeter = \";\"
$UserInfoExchange = \" \"
$UserInfoAD = \" \"
$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.
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 \";\" \"inactifs_user-201509.csv\" -Encoding UTF8) # Import du fichier des comptes inactifs
$Date = (get-date).AddMonths(-4) # Date d'inactivité
$delimeter = \";\"
$UserInfoExchange = \" \"
$UserInfoAD = \" \"
$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.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 3 mois #21421
par xyz
Tutoriels PowerShell
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 = \";\"
[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=\"$Tab\"
$Info
#ou encore
$Ofs=\"'$delimeter'\"
$Info=\"'$Tab'\"
[/code:1]
Suppose des propriétés de type scalaire ou des objets implémentant la méthode ToString().
[code:1]
$P=Get-Process -name Powershell
$delimeter = \";\"
[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=\"$Tab\"
$Info
#ou encore
$Ofs=\"'$delimeter'\"
$Info=\"'$Tab'\"
[/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.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
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
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 \";\" \"inactifs_user-201509.csv\" -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 \";\" \"inactifs_user-201509.csv\" -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 !
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
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 \";\" \"inactifs_user-201509.csv\" -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 \";\" \"inactifs_user-201509.csv\" -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.045 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Croiser données AD / Exchange