Category Archive Non classé

ByPatrick

Interaction avec une base de données Oracle à l’aide de PowerShell

Dans cet article, nous explorons un script PowerShell qui établit une connexion à une base de données Oracle, exécute une requête SQL et traite les potentielles erreurs. Ce script est parfait pour les administrateurs de base de données ou les développeurs qui ont besoin d’automatiser la gestion et la récupération de données Oracle.

Chargement de l’assemblage OracleClient

Le script débute par tenter de charger l’assemblage nécessaire pour interagir avec Oracle, System.Data.OracleClient, en utilisant la méthode LoadWithPartialName. Cette méthode est obsolète et il est recommandé d’utiliser Add-Type avec le chemin complet de l’assembly pour les versions actuelles de PowerShell. Si l’assemblage est chargé avec succès, un message de confirmation s’affiche. Dans le cas contraire, un message d’erreur est affiché et le script se termine avec Exit 1, indiquant une sortie anormale.

$Assembly = [System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")

if ( $Assembly ) {
    Write-Host "System.Data.OracleClient Loaded!"
}
else {
    Write-Host "System.Data.OracleClient could not be loaded! Exiting..."
    Exit 1
}

Configuration de la chaîne de connexion

Ensuite, le script configure une chaîne de connexion à la base de données Oracle. Cette chaîne contient l’identifiant utilisateur, le mot de passe et la source de données, qui sont des éléments cruciaux pour établir une connexion sécurisée.

$OracleConnectionString = "user id=#####;password=#######;data source=######"

Connexion à la base de données Oracle

Avec la chaîne de connexion définie, le script crée un nouvel objet OracleConnection et ouvre la connexion à la base de données.

$OracleConnection = New-Object System.Data.OracleClient.OracleConnection($OracleConnectionString);
$OracleConnection.Open()

Exécution d’une requête SQL

Dans un bloc try, le script prépare une commande SQL pour interroger le nombre d’enregistrements dans une table donnée où la colonne IS_DISABLED est égale à 0.

$OracleSQLQuery = "select count (*) from d_d where IS_DISABLED = 0"

Création et exécution de la commande

Un objet OracleCommand est créé et configuré avec la requête SQL et la connexion à la base de données. La commande est de type texte.

$SelectCommand1 = New-Object System.Data.OracleClient.OracleCommand;
$SelectCommand1.Connection = $OracleConnection
$SelectCommand1.CommandText = $OracleSQLQuery
$SelectCommand1.CommandType = [System.Data.CommandType]::Text

Récupération des résultats

Les résultats de la requête sont chargés dans un objet DataTable en utilisant ExecuteReader sur l’objet commande.

$SelectDataTable = New-Object System.Data.DataTable
$SelectDataTable.Load($SelectCommand1.ExecuteReader())

Gestion des erreurs

Si une erreur survient pendant l’exécution de la requête, le script capture l’exception et affiche un message d’erreur. Cela permet d’identifier facilement les problèmes sans interrompre brusquement le script.

catch {
    Write-Host "Error while retrieving data!"
}

Conclusion

Ce script PowerShell est un outil simple mais puissant pour automatiser la récupération de données d’une base de données Oracle. Il est essentiel de remplacer les marqueurs de position pour l’identifiant utilisateur, le mot de passe et la source de données par des valeurs réelles pour assurer le bon fonctionnement du script. De plus, une gestion des erreurs robuste garantit que le script peut traiter les imprévus de manière élégante et informative.

ByPatrick

Script PowerShell pour la Gestion des Fichiers Anciens et la Supervision avec Graylog

Cet article détaille un script PowerShell conçu pour la suppression de fichiers anciens sur un serveur tout en communiquant les étapes clés du processus à un système de supervision Graylog. Ce script est un exemple de l’intégration entre l’automatisation des tâches système et la surveillance des applications en temps réel.

Configuration de la Connexion Graylog

Le script débute par la configuration de la connexion au serveur Graylog. L’adresse du serveur est spécifiée, ainsi qu’un modèle de message JSON qui sera utilisé pour envoyer des informations à Graylog. Le modèle inclut la version du format de message, le nom de l’hôte (récupéré dynamiquement), un message court par défaut et un niveau de gravité.

$graylogServer = "http://9-o:12294/gelf"
$graylogMessageTemplate = @{
    version = "1.1"
    host = $env:COMPUTERNAME
    short_message = "test"
    level = 1
}

Fonction d’Envoi de Messages à Graylog

Une fonction Send-GraylogMessage est définie pour encapsuler la logique d’envoi de messages. Elle prend en paramètre un message sous forme de chaîne de caractères, met à jour le modèle de message, convertit le message en JSON, puis envoie le message au serveur Graylog en utilisant Invoke-RestMethod.

function Send-GraylogMessage {
    param (
        [Parameter(Mandatory=$true)]
        [string]$message
    )
    $graylogMessageTemplate.short_message = $message
    $jsonMessage = $graylogMessageTemplate | ConvertTo-Json
    Invoke-RestMethod -Method Post -Uri $graylogServer -Body $jsonMessage
}

Configuration du Script de Nettoyage

Le script établit ensuite le dossier cible dont les fichiers doivent être évalués et détermine la limite de temps pour laquelle les fichiers sont considérés comme anciens (dans ce cas, 24 mois).

$targetFolder = "d:\Projects\PortalConductor\cache\user"
$limit = (Get-Date).AddMonths(-24)

Surveillance de l’Exécution

Avant de commencer le processus de nettoyage, le script envoie un message à Graylog pour indiquer le démarrage du script.

Send-GraylogMessage -message "acrp-appora01 : Le script de suppression des fichiers anciens a été démarré."

Traitement des Fichiers

Le script parcourt ensuite tous les fichiers dans le dossier cible et vérifie pour chacun si la date de dernière modification est plus ancienne que la limite fixée. Si c’est le cas, le fichier est supprimé et un message est envoyé à Graylog signalant la suppression du fichier.

$files = Get-ChildItem -Path $targetFolder -File -Recurse

foreach ($file in $files) {
    if ($file.LastWriteTime -lt $limit) {
        Remove-Item -literalpath "$($file.FullName)" -Force
        Send-GraylogMessage -message "acrp-appora01 : Le fichier $($file.FullName) a été supprimé."
    }
}

Message de Fin d’Exécution

Enfin, un dernier message est envoyé à Graylog pour notifier la fin du script.

Send-GraylogMessage -message "acrp-appora01 : La suppression des fichiers anciens est terminée."

Conclusion

Ce script PowerShell est un exemple efficace de la manière dont les tâches administratives peuvent être non seulement automatisées mais aussi supervisées pour une meilleure traçabilité et un suivi en direct. L’intégration avec Graylog permet aux administrateurs de système de recevoir des retours immédiats sur les actions effectuées par le script, ce qui est particulièrement utile pour le dépannage et la documentation des opérations d’entretien régulières.


Assurez-vous que l’adresse du serveur Graylog est correcte et accessible depuis le système où le script est exécuté. Il est également important de noter que le script supprime des fichiers, ce qui est une opération irréversible ; donc une attention particulière doit être portée lors de la spécification du dossier cible et de la période de temps.

ByPatrick

Script PowerShell pour la Migration et l’Archivage de Fichiers avec Robocopy et Gestion des Erreurs

Analyse du Script PowerShell pour la Gestion de Fichiers avec Robocopy et Contrôle d’Espace Disque

Ce script PowerShell est conçu pour gérer le transfert de fichiers entre différents emplacements réseau, en utilisant Robocopy pour les opérations de copie, et en vérifiant les permissions et l’espace disque disponible avant d’effectuer les opérations. Voici une analyse détaillée de chaque section du script :

Configuration des Variables

$sourceFolder = \\.be\DigiMobee\PRD
$destinationFolder = \\FILETRANSFER\Destination_BI
$archiveFolder = \\_FILETRANSFER\Archive
$tempFolder = \\_FILETRANSFER\Temp
$logFolderPath = \\_FILETRANSFER\Logs
  • Description : Cette section configure les chemins des dossiers source, de destination, d’archive, temporaire, et du dossier où seront stockés les logs.

Génération du Nom de Fichier de Log

$logFileName = "log_$(Get-Date -Format 'yyyyMMdd').txt"
$logPath = Join-Path -Path $logFolderPath -ChildPath $logFileName
  • Description : Ici, le script génère un nom de fichier pour le log en utilisant la date actuelle au format ‘yyyyMMdd’ et concatène ce nom avec le chemin du dossier de logs pour obtenir le chemin complet du fichier de log.

Fonction pour Vérifier l’Espace Disque

function Test-DiskSpace {
    param (
        [string]$folder,
        [string]$requiredSpaceGB,
        [string]$folderName
    )
    # ...
}
  • Description : Cette fonction, Test-DiskSpace, vérifie si l’espace disque disponible dans le dossier spécifié est suffisant par rapport à l’espace requis en Go. Si l’espace disque est insuffisant, une exception est levée.

Fonction pour Vérifier les Permissions du Dossier

function Test-FolderPermissions {
    param (
        [string]$folder,
        [string]$folderName,
        [System.Management.Automation.PSCredential]$credentials
    )
    # ...
}
  • Description : La fonction Test-FolderPermissions vérifie si le dossier spécifié existe et si les permissions sont suffisantes pour l’utilisateur connecté (ou les informations d’identification fournies). Si le dossier n’existe pas ou si les permissions ne sont pas suffisantes, une exception est levée.

Fonction pour Envoyer un Email d’Alerte

function Send-AlertEmail {
    param (
        [string]$errorMessage
    )
    # ...
}
  • Description : Cette fonction, Send-AlertEmail, est utilisée pour envoyer un email d’alerte avec un message d’erreur spécifié. Elle configure le corps de l’email avec le message d’erreur et utilise Send-MailMessage pour envoyer l’email via un serveur SMTP.

Fonction pour Effectuer une Opération Robocopy

function Invoke-Robocopy {
    param (
        [string]$source,
        [string]$destination,
        [string]$logFile
    )
    # ...
}
  • Description : La fonction Invoke-Robocopy est utilisée pour exécuter une commande Robocopy pour copier des fichiers du dossier source vers le dossier de destination. Elle configure les options de Robocopy et utilise Start-Process pour exécuter Robocopy. Si l’opération échoue, une exception est levée.

Bloc Try-Catch Principal

try {
    # ...
}
catch {
    $errorMessage = $_.Exception.Message
    Write-Host "Error occurred: $errorMessage"
}
  • Description : Le bloc try-catch principal contient les appels aux fonctions de vérification des permissions, de l’espace disque, et les appels à Invoke-Robocopy pour effectuer les opérations de copie. Il effectue également le nettoyage des dossiers temporaires et source. Si une exception est levée, le bloc catch attrape l’erreur et affiche le message d’erreur.

Points à Noter

  • Les appels aux fonctions Test-FolderPermissions et Test-DiskSpace sont commentés dans le script fourni. Ils devraient être décommentés et configurés avec les informations d’identification appropriées pour fonctionner correctement.
  • Les variables concernant les emails d’alerte (emailFrom, emailTo, emailSubject, emailSmtpServer, emailSmtpPort, emailSmtpUsername, emailSmtpPassword) ne sont pas définies dans le script fourni. Elles doivent être configurées pour que la fonction Send-AlertEmail fonctionne.
  • Le script utilise Remove-Item pour supprimer les fichiers des dossiers source et temporaire. Cela peut être dangereux si les chemins ne sont pas correctement configurés, car il supprime les fichiers sans demande de confirmation.

Ce script est un exemple de gestion avancée des fichiers sur un réseau, avec des contrôles d’espace disque, de permissions, et une gestion des erreurs via des emails d’alerte. Il peut servir de base pour des scénarios de transfert et d’archivage de fichiers plus complexes.

ByPatrick

Analyse du Script PowerShell pour la Gestion de Transfert de Fichiers SFTP et Envoi d’Emails

Ce script PowerShell est conçu pour transférer des fichiers depuis un serveur SFTP vers un emplacement local, et pour envoyer des emails de notification. Voici une analyse détaillée de chaque section du script :

Synopsis et Description

.SYNOPSIS
    FTP transfer scripts

.DESCRIPTION
   Script that will get the Files FICH1, FICH2, FICH3.txt from and send the file 
  • Description : Cette section fournit un bref résumé et une description du script. Elle indique que le script est utilisé pour transférer des fichiers depuis un serveur Ethias et pour envoyer un fichier spécifique.

Notes et Informations

.NOTES
    Author     : 
.INFO'S & REQ'S
   X: drive must be mounted as net use  \\fs-\PUBLIC /user:
  • Description : Cette partie contient des informations sur l’auteur du script, le point de contact, et les prérequis, notamment le montage du lecteur X: via une commande net use.

Configuration des Variables

$LogFilePath="e:\logs\log.txt";
$ServerName="";
$FileServerName="";
$username="";
$SMTPServerName="smtp.";
$remotePath = "/*"
$localPath = "D:\Folder\"
$WinScpDllPath="e:\scripts\\WinSCPnet.dll"
$proxy=""
$SshHostKeyFingerprint="ssh-rsa 2048 "  # PROD
  • Description : Ici, le script configure diverses variables, telles que le chemin du fichier de log, le nom du serveur SFTP, le nom du serveur de fichiers, le nom d’utilisateur, le nom du serveur SMTP, le chemin distant, le chemin local, le chemin de la DLL WinSCP, le serveur proxy, et l’empreinte de la clé SSH.

Fonction de Logging

function log ([string] $message ){
    $a = Get-Date
    $message1= $a.ToString() + " " + $message
    out-file -FilePath $LogFilePath -InputObject $message1 -Append
}
  • Description : La fonction log est utilisée pour écrire des messages de log dans le fichier de log configuré, en ajoutant la date et l’heure à chaque message.

Bloc Try-Catch Principal

try{
    # ...
}
catch [Exception] {
    # ...
}
finally {
    # ...
}
  • Description : Le bloc try-catch-finally encapsule l’exécution du script principal. Il tente d’exécuter le script, attrape les exceptions si elles se produisent, et exécute le bloc finally à la fin, quelle que soit l’issue.

Vérification des Prérequis et Exécution du Script

log("debug du script");
# ...
if ($checklistOk){
    # ...
}
else {
    log("Erreur lors de la checklist")
    exit 2
}
  • Description : Cette section débute par écrire un message de debug dans le fichier de log, puis vérifie si le dossier local existe et met à jour la variable $checklistOk en conséquence. Si tout est OK, le script continue. Sinon, il écrit un message d’erreur et quitte avec le code 2.

Configuration et Utilisation de WinSCP pour le Transfert de Fichiers

Add-Type -Path $WinScpDllPath
$sessionOptions = New-Object WinSCP.SessionOptions
# ...
$session = New-Object WinSCP.Session
# ...
$session.Open($sessionOptions)
# ...
$session.GetFiles($remotePath, $localPath).Check()
# ...
$session.Dispose()
  • Description : Cette partie du script configure les options de session WinSCP, ouvre une session, récupère la liste des fichiers distants, télécharge les fichiers, et ferme la session.

Envoi d’Emails de Notification

$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($SMTPServerName)
# ...
$smtp.Send($msg)
# ...
  • Description : Le script configure un objet MailMessage avec les destinataires, le sujet, et le corps du message, puis utilise un objet SmtpClient pour envoyer l’email via le serveur SMTP configuré.

Points à Noter

  • Le script contient des commentaires TODO qui indiquent des tâches ou des vérifications qui devraient être implémentées, comme vérifier la taille des logs ou vérifier si le dossier de destination existe.
  • Les valeurs de certaines variables sont vides ($ServerName, $FileServerName, $username, etc.) et devraient être remplies avec les informations appropriées pour que le script fonctionne.
  • L’envoi d’email est commenté dans le bloc catch pour éviter l’envoi d’emails intempestifs pendant le développement ou le débogage.

Ce script est un exemple de gestion de transfert de fichiers SFTP et d’envoi d’emails de notification, avec une gestion des exceptions et un système de logging intégré.

ByPatrick

TestLimit

L’outile TestLimit de Sysinternals permets de tester les limites de la ram, crpu et surtout handles de votre machine :

http://download.sysinternals.com/files/TestLimit.zip

Très utile pour des stress tests.

ByPatrick

framework

Un framework peut être défini comme une structure conceptuelle ou méthodologique qui fournit des lignes directrices, des modèles et des outils pour résoudre un problème spécifique ou atteindre un objectif donné.

Dans ce sens plus général, un framework peut être utilisé dans divers domaines tels que la gestion de projet, la gestion des processus métier, la planification stratégique, l’analyse des données, etc. Il fournit un ensemble de principes, de méthodes et d’outils pour orienter et structurer l’approche d’une organisation ou d’une équipe dans la réalisation de ses objectifs.

Un framework peut également inclure des normes, des meilleures pratiques et des modèles reconnus pour aider à la prise de décision, à la résolution de problèmes et à l’optimisation des processus. Il peut être utilisé comme un guide flexible et adaptable pour faciliter la mise en œuvre de solutions efficaces et cohérentes, tout en permettant une certaine personnalisation en fonction des besoins spécifiques de chaque situation.

L’objectif principal d’un framework est de fournir une structure et une orientation pour simplifier et accélérer le travail, tout en garantissant une cohérence et une qualité optimales dans les résultats obtenus.

ByPatrick

DEVSECOPS

DEVSECOPS est un terme qui combine les mots “développement” (DEV), “sécurité” (SEC) et “opérations” (OPS). Il s’agit d’une approche de développement logiciel qui intègre la sécurité dès les premières étapes du processus de développement, plutôt que de la considérer comme une tâche distincte effectuée à la fin.

L’objectif de DEVSECOPS est de créer un environnement où la sécurité est prise en compte dès le début du cycle de vie du développement logiciel, en utilisant des pratiques et des outils automatisés pour identifier, corriger et prévenir les vulnérabilités de sécurité. Cela permet d’assurer que les applications et les systèmes développés sont sécurisés dès leur déploiement, et d’éviter les problèmes de sécurité qui pourraient survenir plus tard dans le processus.

En adoptant l’approche DEVSECOPS, les équipes de développement peuvent intégrer la sécurité dans leurs processus de développement agiles, ce qui permet de réduire les risques de sécurité et d’améliorer la qualité globale des applications.

ByPatrick

Méthodologie de gestion de projets

Il existe de nombreuses méthodologies de gestion de projet en plus d’Agile et PRINCE II. Voici quelques exemples :

1. Waterfall (cascade) : C’est une méthode de gestion de projet linéaire où chaque phase est réalisée séquentiellement, de manière rigide et prévisible.

2. Scrum : Il s’agit d’une méthodologie Agile qui se concentre sur la collaboration d’une équipe auto-organisée pour atteindre des objectifs spécifiques dans des itérations courtes appelées “sprints”.

3. Kanban : Cette méthode de gestion de projet se base sur un tableau visuel pour suivre le flux de travail et les tâches à réaliser. Elle met l’accent sur la limitation du travail en cours et l’amélioration continue.

4. Lean : Inspirée des principes de production de Toyota, cette approche vise à éliminer les gaspillages et à maximiser la valeur pour le client en optimisant les processus.

5. Critical Path Method (CPM) : C’est une méthode de gestion de projet qui identifie la séquence des tâches critiques et détermine la durée totale du projet en fonction de ces tâches.

6. PRINCE2 Agile : Cette méthode combine les principes d’Agile avec le cadre de gestion de projet PRINCE2 pour une approche plus flexible et adaptative.

7. Spiral : Cette approche itérative se concentre sur l’identification progressive des risques et des incertitudes tout au long du projet, en intégrant des cycles de développement et de révision.

8. Extreme Programming (XP) : Cette méthodologie Agile met l’accent sur la collaboration étroite entre les développeurs et les clients, avec des pratiques telles que la programmation en binôme et les tests continus.

9. Six Sigma : Cette méthode vise à améliorer la qualité et la performance en réduisant les variations et les défauts. Elle utilise des outils statistiques pour mesurer et analyser les processus.

ByPatrick

alternatives à UML

UML (Unified Modeling Language) est un langage de modélisation visuelle standardisé utilisé pour représenter graphiquement et communiquer les différentes perspectives et aspects d’un système logiciel. Il fournit un ensemble de notations et de conventions pour décrire la structure, le comportement, les interactions et les relations des composants d’un système logiciel.

Mais il existe plusieurs alternatives à UML (Unified Modeling Language) pour la modélisation et la représentation visuelle des systèmes logiciels. Voici quelques-unes des alternatives couramment utilisées :

1. BPMN (Business Process Model and Notation) : Utilisé principalement pour modéliser les processus métier et les flux de travail.

2. SysML (Systems Modeling Language) : Une extension d’UML spécifiquement conçue pour la modélisation de systèmes complexes, tels que les systèmes embarqués ou les systèmes d’ingénierie.

3. ERD (Entity-Relationship Diagram) : Utilisé pour modéliser les bases de données relationnelles et les relations entre les entités.

4. ArchiMate : Un langage de modélisation d’architecture d’entreprise qui permet de représenter les composants, les relations et les dépendances d’un système d’entreprise.

5. Wireframes et mockups : Des techniques de modélisation basées sur des dessins ou des maquettes pour représenter l’interface utilisateur et l’expérience utilisateur d’une application logicielle.

Ces alternatives offrent différentes approches et niveaux de détail pour la modélisation des systèmes logiciels, et peuvent être choisies en fonction des besoins spécifiques du projet.

ByPatrick

IIS configuration, web.config and windows authentication

Bonjour,

Si vous essayez sur un windows 2016/2019/2022, sur un site web IIS de configurer un site qui a l’authentification windows d’activé via le fichier web.config, il est fort probable que vous receviez une erreur 500 et que si vous allez dans la section sécurité, vous obteniez un message d’erreur : Error : this configuration section cannot be used at this path :

Comme indiqué par microsoft, la solution est ici :

Source : https://learn.microsoft.com/en-us/iis/manage/managing-your-configuration-settings/an-overview-of-feature-delegation-in-iis