Question [RESOLU] Hash MD5

Plus d'informations
il y a 16 ans 1 mois #6169 par TimCruz
[RESOLU] Hash MD5 a été créé par TimCruz
Bonjour à tous,

J'avance tout doucement et avec un toujours plus grand plaisir dans mes scripts Powershell. En contre partie, je vais avoir de moins en moins de cheveux à force de me les arracher (je ne suis pas du tout développeur à la base). Je travaille (et vous ai déjà sollicité sur ce sujet) sur une routine qui va mettre à jour mes informations de comptes mails selon la base SQL d'une appli maison (nommée GRH).

Un collègue a déjà mis en place une solution scriptée en vbs qui mets à jour quotidiennement l'active directory avec les informations de la base (Nom, OU, etc.). Ce script met également à jour le champ PrimarySMTPAddress de mes comptes. Je dois moi passer après ce script et selon le champs PrimarySMTPAddress mettre à jour mon serveur Exchange.

Je vous ai fait un arbre diagramme de flux qui explique mon script :
[img size=150][url=http://img203.imageshack.us/i/verifmailad.gif/][img]http://img203.imageshack.us/img203/5158/verifmailad.gif[/img][/url][/img]

Lien vers l'image : img203.imageshack.us/img203/5158/verifmailad.gif

Mon script est déjà (je trouve) bien avancé, le voici :

[code:1]
#Script de creation automatique de groupe de distribution à partir des groupes de securite à scope Universel
#Un mail est envoyé aux utilisateurs qui se voient créer une nouvelle BAL Exchange


#Connexion à Exchange avec Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin dans le cas seulement où on n'y est pas deja connecte.
if (-not (Get-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin -ErrorAction SilentlyContinue)) {Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin}

$date = [System.DateTime]::Now
$titre = \"Log de creation automatique des adresses mails exchange $date `n\"
$titre

#Connexion à l'AD
#Exlusion des comptes desactives de la recherche avec l'argument (!userAccountControl:1.2.840.113556.1.4.803:=2)
$domaineAD = [ADSI] 'LDAP://DC=MONDOMAINE,DC=fr'
$rechercheAD = New-Object System.DirectoryServices.DirectorySearcher($domaineAD)
$rechercheAD.Filter = '(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))'
$UserAD=$rechercheAD.FindAll()


$database = \"MONSERVEUREXCHANGE\Mailbox Database\" #Sera necessaire à l'activation des BAL exchange
#Listage des elements modifies ou non pour les log
$listebonmail
$listemauvaismail

#Création d'une fonction MdpAleatoire de génération de mdp aléatoire
Function MdpAleatoire
{
[string]$chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_!@#$%'
$bytes = new-object 'System.Byte[]' 8
$rnd = new-object System.Security.Cryptography.RNGCryptoServiceProvider
$rnd.GetBytes($bytes)
$mdp = ''
for( $i=0; $i -lt 8; $i++ )
{
$script:mdp += $chars[ $bytes[$i] % $chars.Length ]
}
}

Function SendMail #Création d'une fonction d'envoie des mails
{
$objet = \"Création de votre boite Mail NOMDEMABOITE\"
$texte = \"Bonjour $PrenomSQL $NomSQL

Votre boite mail NOMDEMABOITE vient d'être crée. Il s'agit de $MailAD

Vous pouvez dès à présent vous connecter à l'adresse suivant : https://MONWEBMAIL/OWA

$phrasemdp\"

$message = new-object System.Net.Mail.MailMessage 'Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.', $EMailSQL, $objet, $texte
$client = new-object System.Net.Mail.SmtpClient 'exchange.cerap.fr'
$client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$client.Send($message)
}



foreach ($elements in $UserAD)
{
#Extraction sous forme de variables des proprietes des elements AD
$caracteristiques = $elements.Properties
$nomAD = $($caracteristiques.name)
$MailAD = $($caracteristiques.mail)
$pwdlastset = $($caracteristiques.pwdlastset)
$cheminAD = $($caracteristiques.adspath)


If ($MailAD -like '*MONDOMAINE.fr') #On exclut les BAL Qui ne sont pas de mon domaine (ex. EDF, etc.)
{
$Emailexchcomparaison = get-mailbox | where-object {$_.PrimarySmtpAddress -eq $MailAD}

If ($Emailexchcomparaison -eq $null) #On ne fait rien si l'adresse mail existe deja dans exchange
{
$Emailexch = get-mailbox -Identity $nomAD

If ($($Emailexch.PrimarySmtpAddress) -eq $null) #Si la BAL Exchange n'existe pas, on en cree une
{
\"L`'adresse mail GRH de $nomAD est $MailAD mais $NomAD n`'a pas d`'adresse Exchange`n\"
\"Tentative d'activation de l'adresse exchange : $MailAD`n\"
Enable-MailBox -Identity $nomAD -database $database

$listemauvaismail = $listemauvaismail+,\"$NomAD`n\"

#Création du mail envoyé à l'utilisateur
$Conn = new-object system.data.sqlclient.sqlconnection
$Conn.connectionstring = \"Server=MONSERVEURSQL;database=MABDDSQL;trusted_connection=yes;\"
$Conn.Open()

$Requete = \"select email_perso, Nom, Prénom from Personnel where email='$MailAD'\"

$cmd = New-object system.data.sqlclient.SqlCommand
$cmd.connection = $Conn
$cmd.commandtext = $Requete

$DataAdapter = new-object System.Data.SqlClient.SQLDataAdapter($cmd)
$DataSet = new-object System.Data.DataSet
$DataAdapter.Fill($DataSet)

#Récupération des données dans un tableau
$tableauSQL = $DataSet.Tables[0].Rows
Foreach ($elements in $tableauSQL)
{
#Récupération des éléments du tableau dans des variables
$NomSQL = \"$($elements.Nom)\"
$PrenomSQL = \"$($elements.Prénom)\"
$EMailSQL = \"$($elements.email_perso)\"
}
If ($EMailSQL -eq $null) {$EMailSQL='Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.'}

If ($pwdlastset -eq '0')
{
#On appel la fonction de génération de mdp aléatoire
MdpAleatoire
#Reset du mot de passe comme la case \"User doit changer de mot de passe à la prochaine ouverture de session\" est cochée
$UseraReset = [ADSI] $cheminAD
$UseraReset.SetPassword($mdp)
$phrasemdp = \"Votre mot de passe est : $mdp\"
}
Else
{
$phrasemdp = \"Votre mot de passe de connexion à votre boite mail est celui que vous utilisez pour votre connexion Windows.\"
}

#On appel la fonction mail
SendMail

}
Else #Si la BAL exchange differente de la BAL dans GRH, on la modifie
{
\"`nL`'adresse mail GRH de $nomAD est $MailAD\"
\"Elle est differente de l`'adresse mail Exchange : $($Emailexch.PrimarySmtpAddress)\"
\"Modification de l'adddresse mail Exchange en $MailAD`n\"
Set-MailBox -Identity $nomAD -PrimarySmtpAddress $MailAD

$listemauvaismail = $listemauvaismail+,\"$NomAD`n\"
}
}
Else
{
$listebonmail = $listebonmail+,\"$NomAD`n\"
}
}
}

If ($listemauvaismail -ne $null)
{
\"Les comptes suivants ont ete modifies par ce script : `n\"
$listemauvaismail
}

\"Aucunes modifications n'ont ete operee pour les adresses des comptes suivants :`n\"
$listebonmail

$duree = $date - [System.DateTime]::Now
\"Le script s'est execute en $duree\"

[/code:1]

Pour avoir un log je lance mon script avec l'argument [code:1]powershell c:\monscrip.ps1 >monlog.doc[/code:1]

Mon problème est que je doit pour l'étape User clic lien reset mdp je dois créer un hash md5 pour me crypter mes info user et je dois les récupérer ensuite, les décrypter pour pouvoir reset le mdp de user avec un mdp aléatoire. Mais je ne sais pas du tout comment créer,récupérer et décrypter mon MD5. Je ne trouve pas sur internet, sans doute parce que je n'ai pas du tout idée de la méthode à employer (honte).

Merci beaucoup si vous pouvez m'aider. En espérant avoir été clair.

Ps. si vous avez aussi des commentaires pour reste du script je suis preneur, comme déjà dit je débute.<br><br>Message édité par: TimCruz, à: 18/02/10 10:26

\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"

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

Plus d'informations
il y a 16 ans 1 mois #6170 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Hash MD5
Salut,
TimCruz écrit:

Je ne trouve pas sur internet, sans doute parce que je n'ai pas du tout idée de la méthode à employer

Peut être sur ce blog , il y a une fonction de traduction. Consulte aussi poshcode.
Sinon regarde sur MSDN, tu trouveras peut être l'API à cibler.
En tout cas j'ai déjà vu sur le net qq scripts conséquents sur le sujet, mais je n'ai pas gardé d'url.
Sur google \&quot;Powershell MD5\&quot; renvoit qq liens.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 mois #6205 par TimCruz
Réponse de TimCruz sur le sujet Re:Hash MD5
Merci Laurent.

Finalement, je suis parti sur un cryptage en base64 avec les commandes

[code:1]
[System.Convert]::ToBase64String([System.Text.Encoding]::UNICODE.GetBytes(STRING_A_CRYPTER))

[System.Text.Encoding]::UNICODE.GetString([System.Convert]::FromBase64String(STRING_A_DECRYPTER))
[/code:1]

\\"Il n\'y a pas de problème, il n\'y a que des solutions\\"

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

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