Dans quelques semaines une série d'articles ayant pour but de documenter l'utilisation de SCVMM (System Center Virtual Machine Manager) sera disponible.
En attendant voici le contexte qui sera exposé :
Matériel :
1 Contrôleur de Domaine
1 Serveur SCVMM
4 Hyperviseurs
1 SAN
1 NAS
Problématique:
L'utilisation des équipements sera à visée éducative. En effet le but étant que des étudiants puissent créer, gérer, supprimer leurs Machines Virtuelles au travers de SCVMM.
Plusieurs points seront alors abordés :
Configuration Réseau
Interfaçage des Comptes utilisateurs Active Directory avec SCVMM
Gestion des droits des utilisateurs
Création des Clouds par classes
Création des Templates
Gestion du Basculement des VM sur les Hyperviseurs
Gestion de la sauvegardes des VM sur un NAS (pas encore réalisé)
APCUPSD est un outil qui permet de gérer via le réseau un onduleur qui ne peut être géré qu'en USB.
Pour voir comment monter son serveur APCUPSD, vous pouvez consulter l'article suivant : "Installation d'un serveur APCUPSD"
Dans cet article nous allons décrire comment installer et configurer un client en mode "esclave" sur un NAS QNAP.
I – Téléchargement de APCUPSD
1. Entware-NG
Le système d’exploitation de QNAP n’intègre pas la commande APT. De ce fait si vous exécutez la commande suivante : « apt-get install apcupsd », le système vous répondra alors : « command not found ».
Pour pallier à ceci il est nécessaire d’installer l’application « Entware-ng » qui vous permettra de remplacer la commande APT.
A – Télécharger Entwar-NG.pkg.
Télécharger le fichier « entware-ng.pkg » grâce au lien suivant :
Connectez-vous à l'interface d'administration web de votre Nas QNAP.
Ouvrez l’application « App Center » et cliquer sur l’icône « Installer une application manuellement »
La boite de dialogue s’ouvre alors. Cliquez alors sur « Parcourir » pour uploader sur le Nas l’application. Cliquez ensuite sur « installer »
Une fois l’installation terminée, l’application apparait alors dans « App Center »
C – Connexion au NAS en SSH avec Putty.
Nous utiliseront l'utilitaire Putty pour pouvoir accéder au NAS en SSH, à noter que vous pouvez utiliser d'autre programmes, ou bien votre terminal pour réaliser les mêmes opérations.
Renseigner l’adresse IP du serveur Nas
2. Installation du Paquet APCUPSD en shell
Sur la console saisissez les commandes suivantes (attention à bien respecter l’ordre)
#accéder à la racine du serveur
cd /
# mise à jour des dépôts
opkg update
# Installation de APCUPSD
opkg install apcupsd
# Retour à la racine du serveur
cd /
# Recherche de tous les fichiers/répertoires qui portent le nom
# « Apcupsd »
find . | fgrep apcupsd
Le temps de la résolution de la commande « find . | fgrep apcupsd » peut être un peu long. En effet le système parcours alors tous les répertoires de votre serveur NAS. Soyez patient...
Nous allons maintenant signifier à APCUPSD qu’il doit être exécuté en mode « Slave » et donc interroger le serveur.
#Editez le fichier « apcupsd.conf3
nano ./share/CACHEDEV1_DATA/.qpkg/Entware-ng/etc/apcupsd/apcupsd.conf
Modifiez alors les valeurs comme ceci:
UPSNAME ups1
UPSCABLE ether
UPSTYPE net
DEVICE IP_SERVEUR_APCUPSD:3551
POLLTIME 10
BATTERYLEVEL 60
MINUTES 60
TIMEOUT 900
NETSERVER on
NISIP 0.0.0.0
Redémarrez le service apcupsd
/opt/sbin/apcupsd &
3.1 Test de communication client/serveur
Nous allons maintenant tester la bonne connexion entre le client (NAS) et le serveur (RASPBERRY). Pour cela exécutez la commande suivante. Cette dernière permettra d’interroger le serveur APCUPSD et de communiquer au client les informations sur l’onduleur.
apacaccess status
Enfin sur votre navigateur web, saisisez l’adresse du serveur APCUPS.
Dans mon cas : " https://IP_DU_SERVEUR_APCUPSD/cgi-bin/apcupsd/multimon.cgi "
Vous pouvez alors contrôler la bonne liaison entre les deux hôtes :
Dans les entreprises ou les établissements, les utilisateurs ont en leur possession une boite mail professionnelle et une signature électronique doit être apposée en bas de chaque mail.
Seulement la problématique est de créer et diffuser les signatures aux utilisateurs. Pour cela certain éditeurs d'applications ont mis en place des logiciels qui viennent en complément de votre messagerie, gérer ses signatures. La gestion est donc facilitée, cependant le coût d'achat de ces applications sont généralement un freins au déploiement de la solution. De ce fait certains Etablissements ne peuvent pas utiliser cette solution.
Pour répondre à ce besoin, j'ai imaginé un script qui pourrait créer un grand nombre de signatures et qui les enverrait par mail aux utilisateurs. Pour cela nous utiliserons le langage PowerShell.
Sommaire :
1 - Création du modèle de signature en HTML
2 - Récupération des identités d'un CSV
3 - Création de la signature HTML
4 - Envoi aux utilisateurs
5 - Téléchargement du Script
I - Création du Model HTML de la signature
Pour commencer nous devons créer le modèle, le Template de notre signature mail. Je vous conseil un générateur en ligne qui est assez bien fait, il s'agit de Free Mail Signature Générator.
Une fois le modèle créer, télécharger le puis insérer le code HTML dans un fichier .html à l'aide de l'outil Notepad.
II - Récupération des données d'un CSV
Le but est de récupérer les identités des utilisateurs d'un fichier CSV. Dans un premier temps je cible le fichier CSV qui porte le nom "liste-personnel-signature.csv" grâce à la fonction GetContent -Path.
La variable $idesignature récupère les données du fichier CSV.
La boucle foreach permet quant à elle permet de parcourir toutes les entrées de notre fichier csv.
# Récupération des identites dans le fichier CSV "liste.csv"
# Conversion du CSV en txt pour récupérer les caractères spéciaux
Get-Content -Path ".\liste-personnel-signature.csv" | Out-File -FilePath ".\Signatures-HTML\liste-personnel-signature_import-unicode.txt" -Encoding Unicode
$idsignature = Import-csv -Path ".\Signatures-HTML\liste-personnel-signature_import-unicode.txt" -Delimiter ";"
foreach ($item in $idsignature)
{
$Identite = $item.Prenom + " " + $item.Nom
$Fonction = $item.Fonction
$NumTel = $item.NumTel
$NumInt = $item.NumInt
$Mail = $item.Mail
Création de la signature HTML
Nous avons à présent parcourut notre fichier CSV et avons récupéré dans le contenu de chaque colonnes dans les variable.
Cependant nous allons devoirs encoder nos chaines de caractères de manière à accepter et afficher les caractères spéciaux tels que "ç" ou encore "É". Nous utiliserons alors la fonction "System.Web.HttpUtility".
#---------------------------- ENCODAGE HTML ---------------------------
$IdentiteConvert = [System.Web.HttpUtility]::HtmlEncode($Identite)
$FonctionConvert = [System.Web.HttpUtility]::HtmlEncode($Fonction)
A présent nous allons récupérer notre code HTML de la signature puis nous allons l'ajouter à notre script powershell. Pour cela voici comment procéder:
Dans un premier temps nous allons créer un fichier qui porte le nom de l'utilisateur: "$fichier_html". Puis nous allons écrire dans ce dernier le code HTML de la signature dans la varible "$html_var".
# -------------------- GENRATION DU FICHIER HTML --------------------
#Creation du fichier HTML
$fichier_html = ".\Signatures-HTML\Signature_$Identite.html"
$html_var = @"
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Signature Ozenne</title>
L'exemple précédent ne comporte par tout le code HTML afin de simplifier les explications
Ensuite il faut adapter votre code HTML de manière à transformer les chaines de caractère en variable. Par exemple ici l’affichage du nom et du prénom de l'utilisateur.
Enfin nous terminons notre l'intégration du code HTML à notre script en fermant la balise HTML puis on stock le code contenu dans la varible "$html_var" dans le fichier de l'utilisateur "$fichier_html".
</html>
"@
# On copie le contenu HTML stocké dans la varible $html_var
Add-Content $fichier_html $html_var
Lien des images et logo : petite astuce.
Afin que vos logos et image soient toujours disponibles, et donc toujours affiché, je vous recommande de stocké ses images sur un hébergement web. Et ainsi de mettre vos URL dans votre code HTML.
Vous avez à présent créée vos signatures HTML, maintenant vous devrez les diffusés aux utilisateurs. Pour cela on va compléter notre script de manière à automatisé l'envoi lors de la création de la signature.
Avant toutes choses vous devrez authoriser votre boite mail à encvoyer des mail grâce à votre script. Pour GMAIL voici le lien de l'activation :
Nous allons créer un fichier texte qui contiendra le corps du mail. Ce fichier ne nomme "message-mail.txt".
ATTENTION; pour être bien interprété par notre messagerie, le fichier contenant le corps de votre message devra être formaté en UTF8-BOM, vous pouvez utiliser Notepad++ pour facilité l'encodage.
#---------------- Envoi par mail de la signaure HTML ---------------------
#La varible corpsmail récupère le texte du fichier message.txt
# ATTENTION LE FICHIER DOIT ETRE ENCODE EN UTF8-BOM POUR LA GESTION DES CARACTERES SPECIAUX
$corpsmail=Get-Content -Path ".\Documentation\message-mail.txt"
Ensuite voici le code pour configurer l'envoi du mail. Pour l'utiliser il vous faudra adapter certaines lignes.
$EmailFrom = mail de l'émetteur
$Subject = L'Objet du mail
$Body = $corpsmail (= fichier texte qui contient le corps du message)
$SMTPServer = l'adresse du serveur SMTP de l'émetteur
$FilenameAndPath1 et $FilenameAndPath2 = Le chemin de vos pièce jointes.
ATTENTION : N'oubliez pas d'ajouter l'extention du fichier ".docx" ; ".pdf" .... Pour la pièce jointe soit bien ajoutée à votre mail
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, Port du serveur)
$SMTPClient.EnableSsl = $true (Utilisation du SSL)
#Adresse mail de destination
$EmailTo = $Mail
#Adresse Mail de l'émméteur
$EmailFrom = "adresse@mail.fr"
#Sujet du Mail
$Subject = "Mise en place de Signature Mail "
#Coprs du mail (message)
$Body = $corpsmail
#serveur SMTP
$SMTPServer = "smtp.gmail.com"
#Pièce jointe à àjouter au message.
$filenameAndPath1 = ".\Signatures-HTML\Signature_$Identite.html"
$filenameAndPath2 = ".\Documentation\Procédure-Ajout-signature-mail-pro-OZENNE.pdf"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$attachment1 = New-Object System.Net.Mail.Attachment($filenameAndPath1)
$attachment2 = New-Object System.Net.Mail.Attachment($filenameAndPath2)
$SMTPMessage.Attachments.Add($attachment1)
$SMTPMessage.Attachments.Add($attachment2)
#paramètre du serveur SMTP de google
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
Enfin deux solutions pour vous authentifier à votre boite mail émettrice :
La fonction suivante permet à utilisateur de saisir lui au travers d'une boite de dialogue ses identifiants et mot de passe. $SMTPClient.Credentials = (Get-Credential)
Par contre la fonction suivante autentifie l'utilisateur dans votre code powershell, cette méthode est la moins sécurisée car les identifiants sont écrits en clair dans le script. Cependant, cette technique est très efficace en phase de teste car elle permet de ne pas saisir vos identifiants à chaque éxecutions du script. Voici la fonction
# Appel à un élément d’authentification, qui permet à l’utilisateur de saisir son mot de passe
#$SMTPClient.Credentials = (Get-Credential)
#Authentification en clair dans le code
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("identifiant@mail.com", "motdepasse")
$SMTPClient.Send($SMTPMessage)
Enfin pour terminer notre script nous devons fermer les balises et ne pas oublier de fermer l'accolade de notre boucle Foreach.