Question [Résolu] Combiner Item Psobject

Plus d'informations
il y a 6 ans 7 mois #24108 par kevinklein
Bonjour l'équipe,

J'aurai svp besoin de votre aide.

Je dois développer un script en powershell qui consiste à envoyer un mail par manager afin d'informer que les comptes de leurs employés respectifs vont arriver à expiration dans les 30 prochains jours.
Voici un exemple concret que j'ai pu établir dans un PSObject:
##USERNAME##
TOTO
TITI
TUTU
TATA
##EXPIRATION_DATE##
28/08/2017
03/09/2017
16/09/2017
06/09/2017
##MAIL_MANAGER##
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

En code
[code:1]
$account = New-Object PSObject
$account | Add-Member -type NoteProperty -Name \"USERNAME\" -Value $username #TOTO, TITI, TUTU, TATA
$account | Add-Member -type NoteProperty -Name \"EXPIRATION_DATE\" -Value $expiration_date #28/08/2017
, 03/09/2017, 16/09/2017, 06/09/2017
$account | Add-Member -type NoteProperty -Name \"MAIL_MANAGER\" -Value $mail_manager #manag1@societe.com, Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser., Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser., Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.[/code:1]

Comme vous avez pu le constater les utilisateurs TOTO et TUTU ont un manager en commun (Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.)
Et pour éviter de spamer le même manager
pour chaque utilisateur (dans notre exemple , il y en a 2, TOTO et TUTU), je souhaiterai grouper par manager \"MAIL_MANAGER\", les utilisateurs \"USERNAME\" et la date d'expiration \"EXPIRATION_DATE\"

Ce qui donnerait ça (désolé pour la syntaxe , je ne suis pas encore au point :) )
##MAIL_MANAGER##
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
##GROUP##
{TOTO - 28/08/2017} {TUTU - 16/09/2017}
{TITI - 03/09/2017}
{TATA - 06/09/2017}

Ensuite, Il faudrait que je puisse parcourir le PSObject et récupérer le MAIL_MANAGER dans une variable $mail_manager et une autre variable $user_expiration (en combinant USERNAME et EXPIRATION_DATE)

Dans le cas de TOTO et TUTU, il faudrait que je puisse afficher en une fois dans le mail :
TOTO - 28/08/2017
TUTU - 16/09/2017

Il existe la fonction Group-Object qui pourrait correspondre à mon besoin. Mais je ne suis pas encore à l'aise.

Pourriez vous svp me dépanner ?

Merci d'avance ;)

Message édité par: Arnaud, à: 25/08/17 15:36<br><br>Message édité par: Arnaud, à: 5/09/17 15:12

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

Plus d'informations
il y a 6 ans 7 mois #24110 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Combiner Item Psobject
Bonjour Kévin !

As-tu consulté l'aide détaillée de la commande Group-Object ?

[code:1]Help Group-Object -detailled -online[/code:1]

En effet l'aide (en mode détaillé) regorge de très nombreux exemples et cette commande est vraiment super pratique. Je te conseille de la maîtriser pour parfaire ton apprentissage de PowerShell.

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 6 ans 7 mois #24111 par kevinklein
Réponse de kevinklein sur le sujet Re:Combiner Item Psobject
Merci Arnaud pour ta réponse,

J'ai en effet regardé mais je me sens toujours à cours d'info pour pouvoir réaliser mon script.


[code:1]$account = @(
New-Object psobject -Property @{ USERNAME = 'TOTO'; EXPIRATION_DATE = '28/08/2017'; MAIL_MANAGER = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'}
New-Object psobject -Property @{ USERNAME = 'TITI'; EXPIRATION_DATE = '03/09/2017'; MAIL_MANAGER = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'}
New-Object psobject -Property @{ USERNAME = 'TUTU'; EXPIRATION_DATE = '16/09/2017'; MAIL_MANAGER = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'}
New-Object psobject -Property @{ USERNAME = 'TATA'; EXPIRATION_DATE = '06/09/2017'; MAIL_MANAGER = 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'}
)


$account | Group-object -property MAIL_MANAGER [/code:1]


Il me manque quelque chose pour faire mon select-object correctement ou je dois mal m'y prendre...

[code:1] $account | Group-object -property MAIL_MANAGER | Select-object Name, @{Name=\&quot;Username_Expiration\&quot;;Expression={$_.Group.USERNAME + \&quot;-\&quot; + $_.Group.EXPIRATION_DATE}}[/code:1]


Merci

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

Plus d'informations
il y a 6 ans 7 mois #24112 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Combiner Item Psobject
Salut,
peut être qq chose comme ceci :
[code:1]

$account |
Group-object -property MAIL_MANAGER |
Foreach{
$_.Group|
Select-object UserName, @{Name=\&quot;Expiration\&quot;;Expression={$_.EXPIRATION_DATE} }
}
}
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 6 ans 7 mois #24117 par kevinklein
Réponse de kevinklein sur le sujet Re:Combiner Item Psobject
Merci Laurent.

Ton code m'a aidé à avancer.
Sauf que je bloque au moment de grouper par manager \&quot;MAIL_MANAGER\&quot;, les utilisateurs \&quot;USERNAME\&quot; et la date d'expiration \&quot;EXPIRATION_DATE\&quot;

[code:1]$account |

Group-object -property MAIL_MANAGER |

Foreach{

$_.Group|

Select-object MAIL_MANAGER, @{Name=\&quot;EXPIRATION\&quot;;Expression={$_.USERNAME + \&quot;-\&quot; + $_.EXPIRATION_DATE} }

}

}[/code:1]


Résultat du code :

##MAIL_MANAGER##
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

##EXPIRATION##
TOTO - 28/08/2017
TUTU - 16/09/2017
TITI - 03/09/2017
TATA - 06/09/2017



Résultat souhaité :

##MAIL_MANAGER##
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

##EXPIRATION##
{TOTO - 28/08/2017} {TUTU - 16/09/2017}
{TITI - 03/09/2017}
{TATA - 06/09/2017}

Est ce que c'est possible ?

Merci d'avance<br><br>Message édité par: kevinklein, à: 28/08/17 12:45

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

Plus d'informations
il y a 6 ans 7 mois #24123 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Combiner Item Psobject
kevinklein écrit:

Est ce que c'est possible ?

Probable.
Est-ce que ton résultat souhaité est un seul mail ?
Ou un mail par manager avec les personnes concernées ?
Sur le principe de ceci :
[code:1]
$account|sort mail_manager|format-table -GroupBy mail_Manager
[/code:1]
Si c'est le cas il faut construire le mail et pas des objets.
MAIL_MANAGER étant le destinataire et les éléments de chaque groupe ses employés respectifs.

Tutoriels PowerShell

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

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