Question Export Données LDAP > Alimentation site annuaire

Plus d'informations
il y a 4 semaines 2 jours - il y a 4 semaines 2 jours #34151 par Dead
Bonjour à tous, 

Je cherche une idée pour faire un site web annuaire de mon lab. 

J'ai fait ce script qui me permet de remonter les infos que je souhaite:

# Importer le module Active Directory
Import-Module ActiveDirectory

# Définir les chemins des unités d'organisation (OU) spécifiques
$ous = "OU=LAB A,OU=Utilisateurs,DC=lab,DC=dom", 
           "OU=LAB B OU=Utilisateurs,DC=lab,DC=dom",
           "OU=LAB C,OU=Utilisateurs,DC=lab,DC=dom"

# Créer un tableau pour stocker les données
$data = @()

# Parcourir chaque unité d'organisation
foreach ($ou in $ous) {
    # Obtenir les utilisateurs de l'unité d'organisation spécifique avec leurs adresses e-mail, numéros de téléphone mobile et fixes
    $users = Get-ADUser -Filter * -SearchBase $ou -Properties EmailAddress, MobilePhone, TelephoneNumber

    # Parcourir chaque utilisateur dans cette unité d'organisation et ajouter ses informations au tableau
    foreach ($user in $users) {
        $name = $user.Name
        $email = $user.EmailAddress
        $mobile = $user.MobilePhone
        $telephoneFixe = $user.TelephoneNumber

        # Récupérer le nom de l'unité d'organisation
        $ouName = $ou.Split(',')[0] -replace 'OU=', ''

        # Créer un objet contenant les informations de l'utilisateur avec le nom de l'unité d'organisation
        $userData = [PSCustomObject]@{
            Name = $name
            Email = $email
            MobilePhone = $mobile
            TelephoneFixe = $telephoneFixe
            OU = $ouName
        }

        # Ajouter l'objet au tableau
        $data += $userData
    }
}

# Exporter les données dans un fichier CSV avec l'encodage UTF-8
$data | Export-Csv -Path "C:\export_users.csv" -NoTypeInformation -Encoding UTF8


Maintenant, je souhaiterais que les données récoltées dans le csv soient envoyé dans un tableau, pour alimenter ma page web html. 

Auriez vous des recommandations, une idée, de comment faire? 

Je vous remercie
Dernière édition: il y a 4 semaines 2 jours par Dead.

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

Plus d'informations
il y a 4 semaines 2 jours - il y a 4 semaines 2 jours #34156 par Fabien
Bonjour Dead,

Je pense que le mieux est d'intégrer directement dans le fichier HTML les données afin que le site web s'affiche correctement.

Sinon, tu peux t'inspirer de ce module pour générer une page web directement avec les informations que tu souhaites.
github.com/dakhama-mehdi/Modern_ActiveDirectory
 
Dernière édition: il y a 4 semaines 2 jours par Fabien.

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

Plus d'informations
il y a 4 semaines 2 jours #34157 par Fabien
Peux-tu me donner le fichier HTML que tu as fait stp pour pouvoir intégrer les variables PowerShell à l'intérieur ?

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

Plus d'informations
il y a 4 semaines 2 jours #34158 par Dead
Bonjour Fabien,

Voici le contenu de mon fichier HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Annuaire d'entreprises</title>
<script src="code.jquery.com/jquery-3.6.0.min.js">
</head>
<body>
<h1>Annuaire d'entreprises</h1>

<table id="annuaire">
<thead>
<tr>
<th>Nom</th>
<th>Prénom</th>
<th>Email</th>
<th>Numéro fixe</th>
<th>Numéro mobile</th>
</tr>
</thead>
<tbody>
<!-- Les données seront insérées ici -->
</tbody>
</table>

<script>
// Fonction pour charger les données depuis un fichier CSV
function chargerDonneesCsv(url) {
$.ajax({
url: url,
dataType: 'text',
success: function(data) {
var lignes = data.split(/\r?\n|\r/);
var tableBody = $('#annuaire tbody');

tableBody.empty();

for (var i = 1; i < lignes.length; i++) {
var champs = lignes.split(',');
if (champs.length === 5) {
tableBody.append('<tr><td>' + champs[0] + '</td><td>' + champs[1] + '</td><td>' + champs[2] + '</td><td>' + champs[3] + '</td><td>' + champs[4] + '</td></tr>');
}
}
}
});
}

// Charger les données CSV lorsque la page est chargée
$(document).ready(function() {
chargerDonneesCsv('C:\Users\admin\export_users.csv');
});
</script>
</body>
</html>


Cependant, là, les données ne sont pas chargées depuis le .csv

Je vous remercie pour votre aide!

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

Plus d'informations
il y a 4 semaines 1 jour #34161 par Alastor
réponse bête, la commande convertto-html ne peut-elle pas t'aider ?

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

Plus d'informations
il y a 4 semaines 1 jour #34162 par Alastor
Sinon tu peux t'inspirer de mon script ci-dessous. Un des premiers que j'avais fait, en reprenant un script que j'avais fait en python... je pense que je ne le ferais plus de cette manière aujourd'hui en powershell, mais bon.
Le javascript embarqué permet à la ligne survolée par la souris de changer de couleur et fait la fonction de recherche.
<#
    .SYNOPSIS
    Permet la génération d'une page HTML avec javascript de filtre, à partir d'un array d'objet passé en paramètre.
    .DESCRIPTION
    .EXAMPLE
    PS> Export-ObjectToHtml.ps1 -Objects (Get-ADGroupMember -Identity "Admins du Domaine") -Path C:\Scripts\data\export.html -Title "Liste des Admins du domaine" -ExceptProperties SID, ObjectGUID
    Génère une table HTML de tous les membres du Groupe "Admins du Domaine", contenant tous les attributs résultant de la commande Get-AdGroupMember comme colonnes, à l'exclusion des attributs SID et ObjectGUID
    La table est sauvegardée dans le fichier "C:\Scripts\data\export.html" et le titre affiché de celle-ci est "Liste des Admins du domaine"
    .NOTES
    Property: Alastor de https://www.powershell-scripting.com/
    Licence: Creative Commons CC BY-NC-SA
    Author:  Alastor
#>
param (
    [Parameter(Mandatory)][PSObject[]]
    # Un Array d'object, chaque attributs sera une colonne du tabelau HTML
    $Objects,
    [Parameter(Mandatory)][String]
    # Le titre de la page Web
    $Title,
    [Parameter(Mandatory)][String]
    # Le chemin du fichier HTML à créer
    $Path,
    [Parameter()]
    # La liste des Attributs a faire apparaitre dans le table, tous si non précisé
    $Properties,
    [Parameter()]
    # la liste des attributs à ne pas faire apparaitre dans la table, aucun si non précisé
    # intervient après application de Properties
    $ExceptProperties
)
#==============================================================
# Format HTML
#==============================================================
$HtmlHeader = "<!DOCTYPE html>
<html>
<head>
<meta name=""viewport"" content=""width=device-width, initial-scale=1"">
<style>
* {
  box-sizing: border-box;
}
#myInput {
  background-image: url('./searchicon.png');
  background-position: 10px 10px;
  background-repeat: no-repeat;
  width: 100%;
  font-size: 16px;
  padding: 12px 20px 12px 40px;
  border: 1px solid #ddd;
  margin-bottom: 12px;
}
#myTable {
  border-collapse: collapse;
  width: 100%;
  border: 1px solid #ddd;
  font-size: 18px;
}
#myTable th, #myTable td {
  text-align: left;
  padding: 12px;
}
#myTable tr {
  border-bottom: 1px solid #ddd;
}
#myTable tr.header, #myTable tr:hover {
  background-color: #f1f1f1;
}
</style>
</head>
<body>
<h2>$Title</h2>
<input type=""text"" id=""myInput"" onkeyup=""myFunction()"" placeholder=""Recherche.."" title=""Type in a name"">
"

$HtmlFooter = "<script>
  function myFunction() {
  // Declare variables
  var input, filter, table, tr, td, i, txtValue, trtd, toShow, tdi;
  input = document.getElementById(""myInput"");
  filter = input.value.toUpperCase();
  table = document.getElementById(""myTable"");
  tr = table.getElementsByTagName(""tr"");
  // Loop through all table rows, and hide those who don't match the search query
  for (i = 1; i < tr.length; i++) {
    trtd = tr[i].getElementsByTagName(""td"");
    toShow=false;
    for (tdi = 0; tdi < trtd.length; tdi++) {
        td = tr[i].getElementsByTagName(""td"")[tdi];
        txtValue = td.textContent || td.innerText;
        if (txtValue.toUpperCase().indexOf(filter) > -1) {
          toShow=true;
        }
    }
    if (toShow) {
      tr[i].style.display = """";
    } else {
      tr[i].style.display = ""none"";
    }
  }
}
</script>
</body>
</html>
"

#==============================================================
# on met l'entete HTML dans le fichier de sortie
$HtmlHeader | Out-File $Path
# importe le "type HTML" et outils associés, dont [System.Web.HttpUtility]::HtmlEncode() dont nous avons besoin
Add-Type -AssemblyName System.Web

# Si l'objet est un array
if ((($Objects.GetType()).BaseType).Name -eq "Array") {
    # On récupère les attributs
    if ($Properties) {
        $AllAttributs = ($Objects[0] | Get-Member -MemberType Properties).Name | Where-Object {$_ -in $Properties}
    } else {
        $AllAttributs = ($Objects[0] | Get-Member -MemberType Properties).Name
    }
    if ($ExceptProperties) {
        $AllAttributs = $AllAttributs | Where-Object {$_ -notin $ExceptProperties}
    }
    $HtmlTable = "<table id=""myTable"">`n<tr class=""header"">"
    # Pour chaque attribut on crée le titre de la table HTML
    foreach ($Attribut in $AllAttributs) {
        $HtmlTable += "<th>" + $Attribut + "</th>`n"
    }
    $HtmlTable += "</tr>`n"
    # Puis pour chaque objet
    foreach ($CurrentObject in $Objects) {
        $HtmlTable += "<tr>"
        $HtmlTableLine = ""
        # puis pour chaque attribut
        foreach ($Attribut in $AllAttributs) {
            $AttributeName = $Attribut
            $AttributeValue = ($CurrentObject).($Attribut)
            $HtmlTableLine += "<td>" + [System.Web.HttpUtility]::HtmlEncode($AttributeValue) + "</td>"
        }
        $HtmlTable += $HtmlTableLine + "`n</tr>`n"
    }
    $HtmlTable += "</table><br>`n"
    $HtmlTable | Out-File $Path -Append
    # on ajoute le footer de la page HTML
    $HtmlFooter  | Out-File $Path -Append
} else {
    Write-Error "Erreur de type de Paramètre : un array est attendu !"
}

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

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