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





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


mardi 16 mai 2017

Ransomware WANNACRY : les moyens de se protéger Ransonware

Il est fort probable que mon article ne fait pas entièrement le tour du sujet, il est là pour vous simplifier la vie et d'appliquer le plus rapidement possible des solutions correctives...
A bon entendeur...

Sources d’informations importantes

Désactivation du protocole SMB V1

https://support.microsoft.com/fr-fr/kb/2696547

Serveurs SMB

Windows 8 et Windows Server 2012

Lancer Windows Powershell :
Set-SmbServerConfiguration -EnableSMB1Protocol $false

Windows 7, Windows Server 2008 R2, Windows Vista et Windows Server 2008

Lancer Windows Powershell :
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force


Clients SMB

Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8 et Windows Server 2012

Lancer le mode de commande (CMD.EXE)
SC.exe config lanmanworkstation depend = bowser/mrxsmb20/nsi
SC.exe config mrxsmb10 start = disabled

Windows 8.1, Windows 10, 2012 R2 de Windows et Windows Server 2016

Systèmes d’exploitation serveurs
Lancer Windows Powershell :
Remove-WindowsFeature FS-SMB1

Systèmes d’exploitation clients
Lancer Windows Powershell :
Disable-WindowsOptionalFeature –Online –Featurename SMB1Protocol



mercredi 5 avril 2017

Windows 10 : Erreur lorsque l'on est administrateur de son poste sur certaines applications : Impossible d'ouvrir ..... à l'aide du compte Administrateur intégré. Connectez-vous avec avec l'aide d'un autre compte puis réssayez

Typiquement nous avons eu ce message d'erreur lors d'une tentative d'ouverture de Microsoft Edge sur un compte du domaine qui est également administrateur local du poste : 

 Impossible d'ouvrir microsoft Edge à l'aide du compte Administrateur intégré. 
Connectez-vous avec avec l'aide d'un autre compte puis réssayez 

 Malgré les instructions de modification de la base du registre ci-joint, le problème persiste : 

Lancez l'éditeur du Registre Windows.

  • Appuyez sur la touche Windows + R
  • Saisir regedit et OK.
  • Déroulez l'arborescence suivante en cliquant sur les + : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
  • A droite, vérifiez que EnableLUA soit à 1
  • Si la valeur FilterAdministratorToken est existant, positionnez la à 1.


 La solution trouvée est de lancer Powershell en mode administration et de taper la commande suivante (il faudra patienter un peu pour que l'ensemble des opérations soient effectifs) : 

Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} 


Pensez bien a redémarrer l'ordinateur après l'application de cette commande powershell.

lundi 8 février 2016

ORA-39126: + ORA-12899: (Problème lors d'un export datapump (expdp) d'une base ORACLE 12c vers ORACLE 11.2)

Lorsque vous effectuez un export d'une base Oracle 12c pour l'importer vers un serveur Oracle 11.2

exemple : expdp user/password@MySid SCHEMAS=MySchema DUMPFILE=MyFile.dmp VERSION=11.2 LOGFILE=MyLogFile.log DIRECTORY=MYDATAPUPDIR EXCLUDE=STATISTICS

l'export se termine avec une erreur du type :

ORA-39126: Erreur fatale inattendue du processus esclave dans KUPW$WORKER.FIXUP_MASTER_TABLE_EXPORT [TABLE_DATA:"C##PARAM"."SYS_EXPORT_SCHEMA_01"] 
ORA-12899: valeur trop grande pour la colonne "SYS"."KU$_DATAPUMP_MASTER_11_1"."PROCESSING_STATUS" (réelle : 3, maximum : 1)
ORA-06512: à "SYS.DBMS_SYS_ERROR", ligne 95
ORA-06512: à "SYS.KUPW$WORKER", ligne 11259
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
00007FFCA1A29F90     27116  package body SYS.KUPW$WORKER
00007FFCA1A29F90     11286  package body SYS.KUPW$WORKER
00007FFCA1A29F90     14133  package body SYS.KUPW$WORKER
00007FFCA1A29F90      3560  package body SYS.KUPW$WORKER
00007FFCA1A29F90     12049  package body SYS.KUPW$WORKER
00007FFCA1A29F90      2081  package body SYS.KUPW$WORKER
00007FFC80B20500         2  anonymous block
BULK COLLECT
BULK COLLECT
In procedure BUILD_OBJECT_STRINGS
In PROCESS_TABLE_DATA_METRICS
In procedure UPDATE_TD_BASE_PO_INFO
Updated 771 td objects with bpo
In procedure FIXUP_MASTER_TABLE_EXPORT Worker code version: 12.1.0.2.0 and compatibility version: 11
0 rows updated for template base object information
Using temporary master table "SYS"."KU$_DATAPUMP_MASTER_11_1" 
In procedure DETERMINE_FATAL_ERROR with ORA-12899: valeur trop grande pour la colonne "SYS"."KU$_DATAPUMP_MASTER_11_1"."PROCESSING_STATUS" (réelle : 3, maximum : 1)
Travail "C##PARAM"."SYS_EXPORT_SCHEMA_01" arrêté en raison d'une erreur fatale à Lun. Févr. 8 13:49:27 2016 elapsed 0 00:02:03

Solution :

Connectez vous à votre base via SQLPLUS  en SYSDBA

sqlplus User/Password@MySID as SYSDBA

lancez ensuite les scripts suivants :
SQL> @?/rdbms/admin/catproc.sql
SQL> @?/rdbms/admin/utlrp.sql

mardi 15 décembre 2015

WIndows Server 2012 R2 - Ralentissement du serveur après l'installation des services Kerberos (Local Security Authority Process occupe plus de 50% du CPU)

En activant les services Kerberos, il peut arriver que la majeure partie du processeur est occupé par ces services et attenants jusqu'à saturation de celui-ci. :

Local Security Authority Process occupe plus de 50% du CPU

Voici la solution que nous avons trouvés :

Dans l'éditeur des clés de registre (REGEDIT)

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters

Ajouter une nouvelle valeur DWORD 32 Bits :

MaxConcurrentApi 

La valeur doit être comprise entre 1 et 150 

Ajustez cette valeur en fonction de ce que vous remarquez au niveau de l'occupation du processeur.

jeudi 18 juin 2015

ACTIVER LES SERVICES SNMP SUR UN LINUX (Noyau REDHAT)


INSTALLATION DES SERVICES SNMP

# yum install net-snmp net-snmp-utils

MODIFICATION DU FICHIER DE CONFIGURATION

# rm /etc/snmp/snmpd.conf
#vim /etc/snmp/snmpd.conf

Insérer les lignes suivantes :
rocommunity Votre_Communauté #read-only V1/V2 community
includeAllDisks   10%   # list all disks

OUVERTURE DU PORT 161 SUR LE FIREWALL

# iptables -I INPUT -p udp --dport 161 -j ACCEPT

SAUVEGARDE DE LA NOUVELLE CONFIGURATION DU FIREWALL

# /etc/init.d/iptables save

RESTART DU FIREWALL

#/etc/init.d/iptables restart

DEMARRAGE ET PARAMETRAGE DU DEMARRAGE AUTOMATIQUE DU SERVICE SNMP

# service snmpd start# chkconfig snmpd on

POUR TESTER LE SERVICE SNMP

Test sur la mémoire disponible
# snmpwalk -v 1 localhost -c Votre_Communauté .1.3.6.1.4.1.2021.4

TABLEAU OFFICIEL des MIB

mardi 2 juin 2015

AFFICHER LA CLEF WINDOWS 8/8.1

comment retrouver une clé d’activation installée sur votre ordinateur avec une version Windows OEM préinstallée par votre fabriquant. Si vous avez acheté un ordinateur bureau ou un ordinateur portable avec une version de Windows 8/8.1 préinstallé, maintenant vous ne trouvez plus d’étiquette avec votre clé de Windows collée sur votre machine.

En cas de besoin où se trouve ma clé d’activation ? Votre clé d’activation est dorénavant directement intégrée dans le BIOS de l’ordinateur, mais vous pouvez retrouver cette clé:

-Ouvrir un invité de commande "en tant qu'administrateur"  (exécuter, CMD)
-Copier-coller de cette commande :

powershell "(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey"


Votre clé d’activation s’affiche, notez et sauvegardez la pour votre future installation et activation auprès de Microsoft.