Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Windows - Virtualization - PowerShell - Active Directory - Office

[PowerShell] Commandes et scripts divers

2 Février 2023 , Rédigé par Aurel Publié dans #PowerShell

Opérateurs de comparaison :

-and And Et
! Not Non
-not Not Non
-or Or Ou
-eq Equal to Egal à
-lt Less than Plus petit que  
-gt Greater than Plus grand que
-ge Greater than or Equal to Plus grand ou égal 
-le Less than or equal to Plus petit ou égal
-ne Not equal to Différent
-like Like (you can use wildcard like * ? [a-x] ) Comme
-notlike No Like (you can use wildcard like * ? [a-x] ) Pas comme

 

 

 

 

 

 

 

 

Pré requis :

# Exécuter des scripts (première configuration de PowerShell) :

# Voir la policy en place

Get-ExecutionPolicy

#Autoriser les scripts en local

Set-ExecutionPolicy RemoteSigned 

A mettre devant le nom du script (allez dans le dossier du script) : .\Script_1.ps1

 

Commandes :

# Version de PowerShell

$PSVersionTable

 

# Supprimer l'entête :

| ft -hidetableheaders

Example : Test-NetConnection -Port 80 -ComputerName ServerA  | select TcpTestSucceeded | ft -hidetableheaders

 

# Voir les commandes contenant les caractères VM

Get-Command *VM* | Sort Noun,Verb 

 

# Lancer l'aide d'un cmdlet dans vote navigateur Internet

Get-help Get-counter -Online

 

# Supprimer les fichiers d'installaton du disque d'un role ou feature de votre serveur 2012

Uninstall-WindowsFeature -Name DHCP –Remove

 

# Voir l'état des roles et features (Installed, Available, Removed)

Get-WindowsFeature

 

# Voir les roles et features installés

Get-WindowsFeature | where-object {$_.Installed -eq $True}

 

# Installer une feature (ici SNMP avec Outils SNMP)

Import-Module ServerManager

Add-WindowsFeature RSAT-SNMP
Add-WindowsFeature SNMP-Service

 

# Saisir une variable ($Computer) : 

$Computer = Read-Host "Nom du PC : "

 

# Tester une commande avec WhatIf :

Get-ADUser 'toto'  | Remove-ADUser -WhatIf

 

# Obtenir la liste des MAJ Windows installées:

 get-wmiobject -class win32_quickfixengineering

 

# Voir le path depuis lequel le script est exécuté :

$currDir = Get-Location
$currDir.Path

 

# Importer un fichier CSV

$ImportFile = "$env:USERPROFILE\Desktop\FichierCSV.csv" 

$Toto = Import-csv $ImportFile -Delimiter ";"

 

# Créer un utilisateur local 'Toto' et le mettre administrateur

New-LocalUser -AccountNeverExpires:$true -Password ( ConvertTo-SecureString -AsPlainText -Force 'titi') -Name 'Toto' | Add-LocalGroupMember -Group administrators

 

Scripts et utiles :

 

1 - Tester si le ping répond (si oui = TRUE) sur la variable $Computer  : 

$Computer = "PC_01"

If ((Test-Connection -computer  $Computer -quiet) -eq "TRUE")
    {    blabla }

 

2 - Si une erreur se produit suite à la commande  Commande_XY (erreur = (!$?)

$error.clear()
$erroractionpreference = "SilentlyContinue"

$Computer = "PC_01"

Commande_XY
If (!$?)
    { blabla }

 

3 - FQDN d'un PC : 

$Computer = "PC_01"

$FQDN_PC = [system.net.dns]::GetHostEntry($Computer).HostName

 

4 - Utiliser un outil en ligne de commande tiers (ici sc.exe) :

# l'option | out-null  permet de ne pas affichier le résultat de la commande sc.exe

Invoke-Expression "sc.exe \\$Computer start remoteregistry" | out-null  

 

5 - Récupérer des valeurs (ici DefaultUserName) dans la base de registre :

$ObjRegKey = $ObjReg.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon")
$UserNObjRegKey.ame = $GetValue("DefaultUserName")

 

 6 - Voir le PasswordLastSet (dernier changement du mot de passe) d'un utilisateur :

Import-Module ActiveDirectory

Get-ADUser 'toto' -properties PasswordLastSet | Format-List

 

7 - Créer un alias pour SQL :

# Création de l'alias SQLTOTO pour le serveur Serveur-SQL sur le port SQL 1433

# Déclaration des variables

$SQLAliasToto = "SQLTOTO"
$SQLServeur-SQL = "Serveur-SQL,1433"

 

# Création clé de registre

If (! (Get-Item -path HKLM:SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo ))

# Si pas de clé ConnectTo alors on la créé
    {
    New-Item -path HKLM:SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo
    }
Else
    {
    New-ItemProperty HKLM:SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo -name $SQLAliasToto -propertytype String -value "DBMSSOCN,$SQLServeur-SQL" -Force
    }

 

8 - Modifier le type de réseau sur Windows 8 / 10 / 2012 / 2016:

# Voir le type de réseau actuel et l'interface réseau associée

Get-NetConnectionProfile

# Modifier le type de réseau (Public / Private) en spécifiant l'interface réseau obtenu précédemment

Set-NetConnectionProfile -InterfaceIndex 10 -NetworkCategory Private

 

9 - Changer les DNS des cartes réseaux ayant des IP spécifiques :

$DNS = "192.168.1.2","192.168.1.3"

$nics = Get-WmiObject Win32_NetworkAdapterConfiguration -ErrorAction Inquire | Where{$_.IPEnabled -eq "TRUE"}
    
    foreach($nic in $nics)

        {
        $IPAddress = $nic.IPAddress

        if(($IPAddress -like "192.168.1.*") )

        {
            Write-Host "Setting up the ADM interface..."
            $nic.SetDNSServerSearchOrder($DNS ) |out-null
            }

        if(($IPAddress -like "192.168.2.*") )

        {
            Write-Host "Setting up the ADM interface..."
            $nic.SetDNSServerSearchOrder($DNS ) |out-null
            }

    }

 

10 - Obtenir le dernier changement de mot de passe et lastlogon d'un objet computer

Get-ADComputer vmaba01  -properties Name, DistinguishedName, passwordLastSet,LastLogonDate

 

11 - Ajouter un compte AD dans un groupe local

# Ajouter le groupe AD group_AD du domaine domainZ dans le groupe local Administrators de server1

([ADSI]"WinNT://server1/Administrators,group").psbase.Invoke("Add",([ADSI]"WinNT://domainZ/group_AD").path)

 

12 - Tache planifiée avec un script PowerShell

Program/script : Powershell –file "C:\script.ps1"

 

13 - Afficher VM étant sur un host Hyper-V spécifique et ayant une propriétés spécifique

# Afficher le nom des VM étant sur le host hv02 et ayant comme valeur DC1 pour la propriétés Datacenter

Get-SCVirtualMachine -VMHost hv02 | where {$_.CustomProperty['Datacenter'] -like "DC1*"} | select-object name

 

14 - Migration de VM étant sur un host Hyper-V spécifique et ayant une propriétés spécifique

# Migrer les 4 premières VM étant sur le host hv02 et ayant comme valeur DC1 pour la propriétés Datacenter sur le host hv01

Get-SCVirtualMachine -VMHost hv02 | where {$_.CustomProperty['Datacenter'] -like "DC1*"} |Select-Object -First 4 | Move-SCVirtualMachine -VMHost hv01 -HighlyAvailable $true -RunAsynchronously

 

15 - Log - Retour écran

Fichier de log :

$date = get-date -UFormat "%Y-%m-%d %Hh%M"

$LogFile = "C:\Temp\log_$date.log" 

out-file $LogFile -inputobject  $server_instance -append

Transcript :

Start-Transcript -Path $TranscriptLogFile -force

Stop-Transcript

Retour écran :

 write-host "server : " $server

 

If ($Dom -eq $null) {
    Write-Warning "Aborting script..."
    Break
}

 

16 - Fonction retourner booléen 1 / 0

$toto = Get-SCVMCheckpoint -VM VMX
Function Test
{
   if ($toto){ return 0 }

  else{ return 1 }
}

Test

 

17 - Paramètres de script

param (
    [parameter(Mandatory = $True, HelpMessage = "FQDN of the domain needed")]
    [String]$Domain = "",
    
    [PSCredential]$Credentials    
)

Exemple de lancement du script : C:\PS>.\Script.ps1 -Domain <domain.AD> -Credentials (Get-Credential)

 

18 - Fonction

# Déclaration fonction avec 2 paramètres

Function Action ($titi, $tata) {

 do stuff

}

# Appel fonction :

Action $titi $tata

 

19 - Fichier log

$LogFile = "$env:USERPROFILE\Desktop\Log_"+$Toto+".log"

# Create log file
If (!(Test-Path $LogFile)) {
    New-Item -Path $LogFile -Force
}

------------------------------------------------------------------------------------

------------------------------------------------------------------------------------

 * * * * * Requêtes avec Active Roles Management Shell for Active Directory  : https://support.oneidentity.com/download-install-detail/5024645

 

1 - Voir les groupes d'un utilisateur (ici toto (samaccountname) du domaine domainY) :

# Sortie dans un fichier CSV (DN des groupes)

get-qaduser 'domainY\toto').memberof | Out-File "D:\Mes documents\Scripts\Groups_user.csv" -encoding ASCII -append

  OU

# Affiche le  DN des groupes

(get-qaduser 'domainY\toto').memberof

  OU

# Affiche le nom et le DN des groupes

(get-qaduser 'domainY\toto').memberof | Get-QADGroup

 

2 - Voir si des users ont PasswordNeverExpires dans une OU (ici People/USA) 

Get-QADUser -PasswordNeverExpires -SearchRoot "toto.dom/People/USA"

 

3 - Voir le LastLogonTimestamp (authentification) d'un utilisateur (ici toto (samaccountname) du domaine domainY) :

Get-QADUser 'domainY\toto' | Format-List lastlogontimestamp

 

# Débugger rapidement un utilistateur (ici toto (samaccountname) du domaine domainY) ayant un compte Active Directory avec une commande permettant de voir : si le compte est actif ou non (AccountIsDisabled), vérrouillé (AccountIsLockedOut), paramètre 'mot de passe n'expire jamais' coché (PasswordNeverExpires), si l'utilisateur doit changer de mot de passe au prochain logon (UserMustChangePassword), si l'utilisateur s'est déjà authentifié (lastlogontimestamp), le dernier changement de mot de passe (PasswordLastSet), l'age du mot de passe (PasswordAge) et un eventuel SIDHistory


Get-QADUser  'domainY\toto' -IncludeAllProperties | Format-List AccountIsDisabled, AccountIsLockedOut, PasswordNeverExpires, UserMustChangePassword, lastlogontimestamp, PasswordLastSet, PasswordAge, SIDHistory 

 

4 - Se connecter à un domaine AD avec un compte spécifique (ici admin du domaine toto.dom) :

# Demande du mot de passe pour le compte autoriser à se connecter au domaine (admin)

$pw = read-host "Enter password" -AsSecureString

# Connexion à un DC du domaine toto.dom

Connect-QADService -Service 'dc01.toto.dom' -ConnectionAccount 'toto\admin' -ConnectionPassword $pw

 

5 - Lister les groups vides d'une OU spécifique :

Get-QADGroup -GroupType Security -Empty $true -service 'toot.dom' -SearchRoot "toto.dom/OU_Y"

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article