vendredi 29 avril 2022

POWERSHELL - ordinateurs inactifs - Liste et suppression de l'active Directory et des enregistrements DNS

#Domaine de l'active directory qui sera parcouru

$Domaine=(Get-WmiObject Win32_ComputerSystem).Domain


#Nombre de jours d'inactivé servant pour la suppression des ordinateurs

$DaysInactive = 200


#Nom du Fichier de sortie pour la liste des ordinateurs Inactifs

$FicInactiveComputers = "c:\temp\$($CDate)_$($Domaine)_InactiveComputers.txt"


#Nom du Fichier de sortie pour les DNS invalides

$FicInvalidDNS = "c:\temp\$($CDate)_$($Domaine)_DnsRecord.txt"


#Date

$CDate = Get-Date -format "yyyyMMdd"


$time = (Get-Date).Adddays(-($DaysInactive))


$InactiveComputers = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties Name, OperatingSystem, SamAccountName, DistinguishedName, LastLogonDate | Format-Table -Property Name,DistinguishedName, LastLogonDate 


#Liste des ordinateurs supprimés 


$InactiveComputers > $FicInactiveComputers


#Suppression des ordinateurs dans l'AD


Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} | Set-ADObject -ProtectedFromAccidentalDeletion:$false


Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} | Remove-ADObject -Recursive 


Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} | Remove-ADComputer 



$InactiveList = Get-Content $FicInactiveComputers


$dnsrecords = Get-DnsServerResourceRecord -ZoneName $Domaine




foreach($ligne in $InactiveList){


    $CarReference = $ligne.IndexOf(" ")

    


   if ($CarReference  -ne -1 ) {

        $Colonne = $ligne.substring(0,$CarReference)

    }



         


    $deadDC = $dnsrecords | Where-Object {$_.HostName -eq $colonne}

    


    #Suppression des entrées DNS


    Remove-DnsServerResourceRecord -ZoneName $Domaine -RRType "A" -name $colonne


    #Liste des entrées DNS supprimées


    $out=$deadDC | Out-File -FilePath $FicInvalidDNS -Append


      


}

mercredi 9 mars 2022

Office 365 - Exchange - comptes utilisateurs - lister les utilisateurs désactivés, qui ont une boite mail et qui ne sont pas encore cachés du carnet d'adresses

 Souvent nous avons besoin de garder des comptes utilisateurs sur l'active directory qui sont désactivés, alors que les boites aux lettres ne sont pas encore supprimées sur Exchange ou Office 365.

Ces comptes utilisateurs, si ils concernent des collaborateurs partis, il y a de fortes chances que l'on ne veut plus les voir apparaitre dans le carnet d'adresses Outlook des différents utilisateurs.

Voici une petite commande powershell qui va vous lister l'ensemble des comptes désactivés, ayant une boite mail et qui sont encore visibles dans les listes et carnets d'adresses :

Get-Mailbox | Where {$_.HiddenFromAddressListsEnabled -eq $False} | Get-User | Where-Object {$_.AccountDisabled -eq 'True'}

il faudra bien entendu au préalable se connecter à Office-Exchange 365 (voir les posts précédents) ainsi qu'être soit sur un contrôleur de domaine ou sur un poste qui a les modules de powershell active Directory installés...

lundi 21 février 2022

Office 365 & exchange Liste des boites mails triés par volumétrie

 1) Préalable pour se connecter à Exchange (Office 365)

Install-Module -Name ExchangeOnlineManagement

(si ce n'est pas déjà fait)

2) Se connecter à Exchange (Office 365)

Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName moncompteadmin@mondomaine.com


Liste des boites mails triés par volumétrie

Get-EXOMailbox -ResultSize Unlimited | Get-EXOMailboxStatistics | Select @{Label="Utilisateur"; Expression = {$_.DisplayName}}, @{name="TotalUtilise (MB)"; expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}}, @{name="NbElements"; expression={$_.ItemCount}} | Sort 'TotalUtilise (MB)'


Liste des 5 dossiers mails d'un utilisateur les plus volumineux :

 Get-MailboxFolderStatistics mailutilisateur@mondomaine.com | Select-Object FolderPath,@{Name="SubFoldersize";Expression={$r=$_.FolderAndSubfolderSize; [int] $a = ($r.Substring($r.IndexOf("(")+1,($r.Length - 2 - $r.IndexOf("("))) -replace " bytes","" -replace ",","") ; $a } } | Sort-Object SubFolderSize -Descending | Select-Object FolderPath,@{Name="Folder-and-Subfolder-Size";Expression={[String] $_.SubFolderSize + " MB"}} -First 5

Liste des "plans" selon les abonnements des boites aux lettres dans Office 365 :

Get-MailboxPlan -Identity ExchangeOnlineEnterprise | format-List 

ou

Get-MailboxPlan -Identity ExchangeOnlineEnterprise 

Définir une alerte de quota sur un des "plans" de boite aux lettres exchange

Set-MailboxPlan -Identity ExchangeOnlineEnterprise -IssueWarningQuota 30GB




jeudi 10 février 2022

WINDOWS - TUER UN PROCESSUS D'UN SERVICE QUI NE VEUT PAS S'ARRETER (ETAT ARRET DANS LA LISTE DES SERVICES)

 1) Ouvrir en tant qu'administrateur une fenêtre de commande (CMD)

2) Repérer le PID du service qui est en fonction

sc queryex [nom_du_service]

Repérer dans le résultat affiché la ligne du PID, et noter le numéro

3) Tuer le processus du service en question

taskkill /PID [PID du service] /f




vendredi 7 janvier 2022

CITRIX & VMWARE erreur Citrix : "Vérifier que les certificats appropriés sont installés sur le serveur VCenter et sur la même machine que toutes les instances du service Host."

 CITRIX & VMWARE erreur Citrix : "Vérifier que les certificats appropriés sont installés sur le serveur VCenter et sur la même machine que toutes les instances du service Host."

Citrix : Cannot Connect to the vCenter Server due to a Certificate Error


Liste des pistes et sources :

Error:"Cannot Connect to the vCenter Server due to a Certificate Error"
https://support.citrix.com/article/CTX138640

Delivery Controller cannot contact vCenter server after certificate update on vCenter
https://support.citrix.com/article/CTX224551

Cause :
Vous avez mis à jour le certificat de votre Vcenter et Citrix MCS n'est pas content car votre connecteur contient encore les informations (ThumbPrint) de l'ancien certificat

Solution la plus pratique :

- Sur un de vos Delivery Controler créez une nouvelle connexion et des ressources, identique à votre connexion initiale et approuvez le certificat





- en powershell
Charger les modules Citrix
> asnp citrix.* 

Pour avoir la liste des connexions existantes et repérer le bon nom de connexion à utiliser/modifier
Get-ChildItem XDHyp:\Connections | Select-object HypervisorConnectionName

Pour récupérer le Thumprint du nouveau certificat, copiez celui de la nouvelle connexion.
Vous aurez cette information en lançant cette commande :
Get-Item -LiteralPath XDHyp:\Connections\[Nom de Connexion]

puis sur chaque Delivery Controler en powershell, modifiez le thumprint du certificat de la connexion initiale :
> $cred = Get-Credential
> Set-Item -LiteralPath "XDHyp:\Connections\[Nom de connexion]" -username $cred.username -securepassword $cred.password -sslthumbprint "[ThumbPrint du nouveau Certificat]" -hypervisorAddress https://[Adresse du Vcenter]/sdk

Vous pouvez ensuite détruire la connexion que vous avez précédemment créé (celle qui est identique à l'initiale bien sûr et pas l'initiale...)

Annexes :

  • Si l'autorité de certification ne fait pas partie de domaine Active Directory, et/ou que vos Citrix Delivery Controlers ne sont pas enrôlés sur le domaine en question, il est fort possible que vous deviez également installer le certificat et l'autorité de certification sur les Delivery Controlers.

  • Si vous ne créez pas une nouvelle connexion, identique à la première vous avez des forts risques (comme moi) d'avoir cette erreur à l'execution de la commande powershell Set-Item...


Set-Item : Cannot connect to the VCenter server due to a certificate error. Make sure that the appropriate
certificates are installed on the VCenter server, and install the appropriate certificates on all machines that
contain instances of the Host service.
Au caractère Ligne:1 : 1
+ Set-Item -LiteralPath "XDHyp:\Connections\Vsphere Simplivity" -userna ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (:) [Set-Item], InvalidOperationException
    + FullyQualifiedErrorId : Citrix.XDPowerShell.HostStatus.VCenterConnectionSslFailure,Microsoft.PowerShell.Commands
   .SetItemCommand

Set-Item : Cannot connect to the VCenter server due to a certificate error. Make sure that the appropriate
certificates are installed on the VCenter server, and install the appropriate certificates on all machines that
contain instances of the Host service.
Au caractère Ligne:1 : 1
+ Set-Item -LiteralPath "XDHyp:\Connections\------------" -userna ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-Item], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.SetItemCommand

  • Le Thumbrint du Certificat doit être en Majuscules (en minuscules cela ne fonctionne pas...)

  • Lister les informations d'une connexion et ses ressources :

    Get-Item -LiteralPath XDHyp:\Connections\"[Nom de la connexion]"








mardi 28 décembre 2021

GLPI SOUS DEBIAN

 Petites notes personnelles

  1. TELECHARGEMENT DE DEBIAN

    https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/

  2. CONFIGURATION MINIMALE

    1Go RAM - 20 Go HDD

  3. Déterminer les comptes/Mot de passe utiles

    Administrateur
    root 

    Utilisateur
    glpi_user

    Database Owner
    mysql_glpi

  4. MISES A JOUR DE L'ENVIRONNEMENT

    apt update && apt upgrade -y
    apt-get update
    apt-get dist-upgrade


  5. INSTALLATION DES COMPOSANTS

    apt install apache2 php libapache2-mod-php mariadb-server -y

    apt install php-mysqli php-mbstring php-curl php-gd php-simplexml php-intl php-ldap php-apcu php-xmlrpc php-cas php-zip php-bz2 php-ldap php-imap -y


  6. CONFIGURATION MYSQL / MARIADB

    mysql_secure_installation

    L'utilisateur root indiqué dans l'installation n'est pas celui de la machine, mais bien l'utilisateur root pour mysql

    Son mot de passe par défaut est vide, il conviendra de le définir et qu'il ne soit pas identique au mot de passe root de la machine

    Répondre Y à toutes les questions posées

  7. CONNEXION A MYSQL

    mysql -u [NomUser] -p

  8. VERIFIER QU'APACHE 2 EST ACTIF

    systemctl status apache2

  9. TELECHARGER ET INSTALLER PHPMYADMIN

    cd Downloads
    wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
    wget https://files.phpmyadmin.net/phpmyadmin.keyring

    gpg --import phpmyadmin.keyring

    wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz.asc

    mkdir /var/www/html/phpmyadmin
    tar xvf phpMyAdmin-latest-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpmyadminn

    sudo cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php




  10. EDITER LE FICHIER config.inc.php

    nano /var/www/html/phpmyadmin/config.inc.php

  11. CREER UNE PASSPHRASE

    $cfg['blowfish_secret'] = '[my_secret_passphrase]';

  12. GESTION DES DROITS SUR LE REPERTOIRE PHPMYADMIN

    sudo chmod 660 /var/www/html/phpmyadmin/config.inc.php
    sudo chown -R www-data:www-data /var/www/html/phpmyadmin

  13. REDEMARRER APACHE

    sudo systemctl restart apache2

  14. CREER LE CORPS DE LA DATABASE POUR GLPI

    mysql -u [NomUser] -p

    Create database [Nom_Database];

    exit

  15. TELECHARGEMENT / INSTALLATION GLPI

    cd Downloads

    wget https://github.com/glpi-project/glpi/releases/download/..............

    (Se référer au site en question pour télécharger la version désirée)

    tar -xvzf [nom_du_package_GLPI].tgz

    shopt -s dotglob
    rm /var/www/html/index.html
    mkdir /var/www/html/glpi
    cp -r glpi/* /var/www/html/glpi
    chown -R www-data /var/www/html/glpi

  16. GESTION DES FUSEAUX HORAIRES

    mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -p -u root mysql
    mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p -Dmysql
    systemctl restart mariadb

    mysql -u root -p
    GRANT SELECT ON `mysql`.`time_zone_name` TO 'mysql'@'localhost';
    GRANT SELECT ON `mysql`.`time_zone_name` TO 'root'@'localhost';
    GRANT SELECT ON `mysql`.`time_zone_name` TO 'mysql_glpi'@'localhost';
    FLUSH PRIVILEGES;
    Exit

    cd /var/www/html/glpi
    php bin/console glpi:migration:timestamps

  17. GESTION DU CRON

    nano  /etc/contrab

    Ajouter  la ligne

    * * * * *  root /usr/bin/php /var/www/html/glpi/front/cron.php &>/dev/null

    /etc/init.d/cron restart

  18. INSTALLER NETSAT

    apt install net-tools
    apt-get install mlocate
    updatedb
    locate a2enmod
    cp

  19. CONFIGURATION DE L'ALIAS DU SITE WEB

    cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/[Nom_Alias].conf

    nano /etc/apache2/sites-available/
    [Nom_Alias].conf

    Ajouter dans le fichier

    ServerName [Nom_Alias]
      ServerAdmin [AdresseMailAdmin@societe.com]
      ServerAlias [Nom_Alias]
      DocumentRoot /var/www/html/glpi

    /usr/sbin/a2dissite 000-default.conf
    /usr/sbin/a2ensite [Nom_Alias].conf
    systemctl reload apache2

  20. GESTION DU SSL

    /usr/sbin/a2enmod ssl
    /usr/sbin/a2enmod header
    systemctl restart apache2

    mkdir /etc/ssl/[Nom_Alias]

    Copier le certificat ssl, la clé privée, le certificat intermédiaire si il existe, le certificat racine dans le répertoire créé

    Vérifier que HTTPS est bien activé sous Apache :
    netstat -tanpu | grep "LISTEN" | grep "443"

    Créer le virtualhost pour ssl

    cp /etc/apache2/sites-avalaible/[Nom_Alias].conf /etc/apache2/sites-avalaible/[Nom_Alias]-ssl.conf 

    Nano /etc/apache2/sites-available/
    [Nom_Alias]-ssl.conf 

    On édite le fichier :

    VirtualHost *:443>
            # The ServerName directive sets the request scheme, hostname and port that
            # the server uses to identify itself. This is used when creating
            # redirection URLs. In the context of virtual hosts, the ServerName
            # specifies what hostname must appear in the request's Host: header to
            # match this virtual host. For the default virtual host (this file) this
            # value is not decisive as it is used as a last resort host regardless.
            # However, you must set it for any further virtual host explicitly.
            #ServerName www.example.com

            ServerName [Nom_Alias]
           
    ServerAdmin  [AdresseMailAdmin@societe.com]
          ServerAlias [Nom_Alias]
           
    DocumentRoot /var/www/html/glpi
    # L'accès web au répertoire des fichiers est protégé
    <Directory /var/www/html/glpi>
                    Options indexes FollowSymLinks
                    AllowOverride All
                    Require all granted
    </Directory>

            # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
            # error, crit, alert, emerg.
            # It is also possible to configure the loglevel for particular
            # modules, e.g.
            #LogLevel info ssl:warn
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

            # For most configuration files from conf-available/, which are
            # enabled or disabled at a global level, it is possible to
            # include a line for only one particular virtual host. For example the
            # following line enables the CGI configuration for this host only
            # after it has been globally disabled with "a2disconf".
            #Include conf-available/serve-cgi-bin.conf

            # On active le SSL
            SSLEngine On

            # On active tous les protocoles (TLS v1.0, TLS v1.1 et TLS v1.2), mais on
    désactive SSL v2 et v3 (obsolètes et remplacés par TLS)
            SSLProtocol All -SSLv3 -SSLv2

            # On active les méthodes de chiffrement, et on désactive les méthodes de chiffrement non sécurisés (par la présente d'un !)
            SSLCipherSuite HIGH:!aNULL:!MD5:!ADH:!RC4:!DH

            # On demande au navigateur de sélectionner une méthode de chiffrement en respectant l'ordre envoyée par le serveur (HIGH uniquement)
            SSLHonorCipherOrder on

            # On renseigne le chemin vers le certificat SSL de l'adresse à sécuriser
            SSLCertificateFile "/etc/ssl/[Nom_Alias]/[NomDuCertificat].crt"

          # On renseigne le chemin vers la clée privée correspondant au certificat SSL de l'adresse à sécuriser
            SSLCertificateKeyFile "/etc/ssl/[Nom_Alias]/[NomDeLaClePrivee].key"

            # On renseigne le chemin vers le certificat SSL racine, puis vers le(s) certificat(s) SSL intermédiaire(s).
            # Si vous disposez de plusieurs certificats intermédiaires, vous pouvez ajouter d'autres directives SSLCACertificateFile.
            SSLCACertificateFile "/etc/ssl/[Nom_Alias]/[CetificatIntermediaire].crt
            SSLCACertificateFile "/etc/ssl/[Nom_Alias]/[CertificatIntermediaire].pem"
            Header always set Strict-Transport-Security "max-age=15768000"  
    </VirtualHost>

    /usr/sbin/a2ensite support.thermi-lyon.fr-ssl
    systemctl reload apache2













CHOCOLATEY

Qu'est ce que CHOCOLATEY ?

 CHOCOLATEY est un gestionnaire d'installation et de déploiement de packages logiciels. Dédié au déploiement sous les systèmes d'exploitation Microsoft Windows, il permet de simplifier le téléchargement, l'installation, la mise à jour des applications. Chocolatey se base sur NuGet et Windows Powershell.

INSTALLATION

Le mieux est d'aller directement sur le site concerné :
https://chocolatey.org/install

RECHERCHER UN LOGICIEL

PS > choco search --by-id-only NomDuLogiciel

INSTALLER UN LOGICIEL

PS > choco install NomDuLogiciel -y

SUPPRIMER UN LOGICIEL

PS > choco uninstall NomDuLogiciel

MISES A JOUR :

Vérifier la disponibilité des mises à jour

PS > choco outdated

Mettre à jour un logiciel

PS > choco upgrade NomDuLogiciel -y

Mettre à jour tous les logiciels possèdant une mise à jour disponible

PS > choco upgrade all -y

LOGICIELS DEPLOYES PAR CHOCOLATEY

Lister les logiciels déployés via Chocolatey

PS > choco list -l

RESUME DES COMMANDES

  • config – récupère et configure les paramètres du fichier de configuration
  • Download – télécharge 
  • feature ou features – affiche et configure les fonctionnalités de choco
  • install – installe 
  • info – affiche les informations
  • list  – liste les installations distantes ou locales
  • new – génère les fichiers nécessaires pour un paquet chocolatey à partir d’un modèle
  • optimize – optimise l’installation et réduit l’utilisation de l’espace
  • outdated – affiche les paquets obsolètes. Similaire à choco upgrade all --noop
  • pack – converti un nuspec en un nupkg compilé
  • pin – supprime les mises à jour 
  • push – pousse un nupkg compilé
  • search - Recherche 
  • setapikey ou apikey – recupère ou sauvegarde une apikey depuis une source définie
  • sources ou source – affiche et configure les sources par défaut
  • support – fournit des informations de support
  • synchronize ou sync – se synchronise avec le logiciel installé sur le système – génère des packages manquants
  • uninstall – désinstalle un paquet
  • upgrade – met à jour des paquets
Il existe également une alternative afin d'utiliser OneGet de Microsoft :

https://github.com/HansOMartinsen/ChocolateyGet