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





vendredi 19 novembre 2021

(POWERSHELL) WINDOWS 10 - Supprimer les applications du Windows Store pour alléger les configurations

 # Functions

function Write-LogEntry {

    param(

        [parameter(Mandatory=$true, HelpMessage="Value added to the RemovedApps.log file.")]

        [ValidateNotNullOrEmpty()]

        [string]$Value,


        [parameter(Mandatory=$false, HelpMessage="Name of the log file that the entry will written to.")]

        [ValidateNotNullOrEmpty()]

        [string]$FileName = "RemovedApps.log"

    )

    # Determine log file location

    $LogFilePath = Join-Path -Path $env:windir -ChildPath "Temp\$($FileName)"


    # Add value to log file

    try {

        Out-File -InputObject $Value -Append -NoClobber -Encoding Default -FilePath $LogFilePath -ErrorAction Stop

    }

    catch [System.Exception] {

        Write-Warning -Message "Unable to append log entry to RemovedApps.log file"

    }

}


# Get a list of all apps

Write-LogEntry -Value "Starting built-in AppxPackage, AppxProvisioningPackage and Feature on Demand V2 removal process"

$AppArrayList = Get-AppxPackage -PackageTypeFilter Bundle -AllUsers | Select-Object -Property Name, PackageFullName | Sort-Object -Property Name


# White list of appx packages to keep installed

$WhiteListedApps = @(

    "Microsoft.DesktopAppInstaller", 

    "Microsoft.Messaging", 

    "Microsoft.MSPaint",

    "Microsoft.Windows.Photos",

    "Microsoft.StorePurchaseApp",

    "Microsoft.MicrosoftOfficeHub",

    "Microsoft.MicrosoftStickyNotes",

    "Microsoft.WindowsAlarms",

    "Microsoft.WindowsCalculator", 

#    "Microsoft.WindowsCommunicationsApps", # Mail, Calendar etc

    "Microsoft.WindowsSoundRecorder" 

#    "Microsoft.WindowsStore"

)


# Loop through the list of appx packages

foreach ($App in $AppArrayList) {

    # If application name not in appx package white list, remove AppxPackage and AppxProvisioningPackage

    if (($App.Name -in $WhiteListedApps)) {

        Write-LogEntry -Value "Skipping excluded application package: $($App.Name)"

    }

    else {

        # Gather package names

        $AppPackageFullName = Get-AppxPackage -Name $App.Name | Select-Object -ExpandProperty PackageFullName -First 1

        $AppProvisioningPackageName = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -like $App.Name } | Select-Object -ExpandProperty PackageName -First 1


        # Attempt to remove AppxPackage

        if ($AppPackageFullName -ne $null) {

            try {

                Write-LogEntry -Value "Removing AppxPackage: $($AppPackageFullName)"

                Remove-AppxPackage -Package $AppPackageFullName -ErrorAction Stop | Out-Null

            }

            catch [System.Exception] {

                Write-LogEntry -Value "Removing AppxPackage '$($AppPackageFullName)' failed: $($_.Exception.Message)"

            }

        }

        else {

            Write-LogEntry -Value "Unable to locate AppxPackage: $($AppPackageFullName)"

        }


        # Attempt to remove AppxProvisioningPackage

        if ($AppProvisioningPackageName -ne $null) {

            try {

                Write-LogEntry -Value "Removing AppxProvisioningPackage: $($AppProvisioningPackageName)"

                Remove-AppxProvisionedPackage -PackageName $AppProvisioningPackageName -Online -ErrorAction Stop | Out-Null

            }

            catch [System.Exception] {

                Write-LogEntry -Value "Removing AppxProvisioningPackage '$($AppProvisioningPackageName)' failed: $($_.Exception.Message)"

            }

        }

        else {

            Write-LogEntry -Value "Unable to locate AppxProvisioningPackage: $($AppProvisioningPackageName)"

        }

    }

}


# White list of Features On Demand V2 packages

Write-LogEntry -Value "Starting Features on Demand V2 removal process"

$WhiteListOnDemand = "NetFX3|Tools.Graphics.DirectX|Tools.DeveloperMode.Core|Language|Browser.InternetExplorer|ContactSupport|OneCoreUAP|Media.WindowsMediaPlayer"


# Get Features On Demand that should be removed

try {

    $OSBuildNumber = Get-WmiObject -Class "Win32_OperatingSystem" | Select-Object -ExpandProperty BuildNumber


    # Handle cmdlet limitations for older OS builds

    if ($OSBuildNumber -le "16299") {

        $OnDemandFeatures = Get-WindowsCapability -Online -ErrorAction Stop | Where-Object { $_.Name -notmatch $WhiteListOnDemand -and $_.State -like "Installed"} | Select-Object -ExpandProperty Name

    }

    else {

        $OnDemandFeatures = Get-WindowsCapability -Online -LimitAccess -ErrorAction Stop | Where-Object { $_.Name -notmatch $WhiteListOnDemand -and $_.State -like "Installed"} | Select-Object -ExpandProperty Name

    }


    foreach ($Feature in $OnDemandFeatures) {

        try {

            Write-LogEntry -Value "Removing Feature on Demand V2 package: $($Feature)"


            # Handle cmdlet limitations for older OS builds

            if ($OSBuildNumber -le "16299") {

                Get-WindowsCapability -Online -ErrorAction Stop | Where-Object { $_.Name -like $Feature } | Remove-WindowsCapability -Online -ErrorAction Stop | Out-Null

            }

            else {

                Get-WindowsCapability -Online -LimitAccess -ErrorAction Stop | Where-Object { $_.Name -like $Feature } | Remove-WindowsCapability -Online -ErrorAction Stop | Out-Null

            }

        }

        catch [System.Exception] {

            Write-LogEntry -Value "Removing Feature on Demand V2 package failed: $($_.Exception.Message)"

        }

    }    

}

catch [System.Exception] {

    Write-LogEntry -Value "Attempting to list Feature on Demand V2 packages failed: $($_.Exception.Message)"

}


# Complete

Write-LogEntry -Value "Completed built-in AppxPackage, AppxProvisioningPackage and Feature on Demand V2 removal process"


ALTERNATIVE très intéressante  : Windows 10 Debloater

https://github.com/Sycnex/Windows10Debloater

jeudi 18 novembre 2021

Exchange (Office 365) & Powershell - Gestion des groupes de distribution dynamiques

 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


Voir l'ensemble des boites aux lettres appartenant au groupe de distribution dynamique

Get-Recipient -Filter (Get-DynamicDistributionGroup “groupedynamique@mondomaine.com”).RecipientFilter


Créer un groupe dynamique contenant l'ensemble des boites mails des utilisateurs 

Set-DynamicDistributionGroup -Identity groupedynamique@mondomaine.com -RecipientFilter {(RecipientType -eq 'UserMailbox') -and (-not(RecipientTypeDetails -eq 'SharedMailbox')) -and (-not(RecipientTypeDetails -eq 'RoomMailbox')) -and (-not(RecipientTypeDetails -eq 'MailContact')) -and (-not(RecipientTypeDetails -eq 'DynamicDistributionGroup')) -and (-not(RecipientTypeDetails -eq 'EquipmentMailbox')) }

Par ces paramètres on élimine :
  • Les boites aux lettres partagées
  • Les boites aux lettres de salles
  • Les boites aux lettres des contacts
  • Les boites aux lettres de groupes de distribution dynamiques
  • Les boites aux lettres d'équipement

Connaitre les filtres appliqués sur un groupe de distribution dynamique

Get-DynamicDistributionGroup -Identity groupedynamique@mondomaine.com | fl Name,RecipientFilter















vendredi 10 août 2018

Désactiver l’autoconfiguration IP dans Windows - Invite de commande

1. Repérer l'identifiant (IDX) de la carte réseau 

netsh interface ipv4 show inter

2. Saisir la commande 

netsh interface ipv4 set interface [IDX de la carte réseau] dadtransmits=0 store=persistent