[PowerShell] Commandes et scripts divers
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}
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
get-wmiobject -class win32_quickfixengineering
$currDir = Get-Location
$currDir.Path
$Toto = Import-csv $ImportFile -Delimiter ";"
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
$SQLAliasToto = "SQLTOTO"
$SQLServeur-SQL = "Serveur-SQL,1433"
If (! (Get-Item -path HKLM:SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo ))
# Si pas de clé
{
New-Item -path HKLM:SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo
}
Else
{
New-ItemProperty HKLM:SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo -name $ -propertytype String -value "DBMSSOCN,$ " -Force
}
# 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"