Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/plugins/portfolio-slideshow/portfolio-slideshow.php:65) in /var/www/html/wp-includes/feed-rss2.php on line 8
Powershell – Les mémos d'un admin système https://blog-sysadmin.archives.slashroot.fr Sat, 29 Jul 2017 07:31:37 +0000 fr-FR hourly 1 https://wordpress.org/?v=4.8.23 [Powershell] Récupérer la date de dernière connexion https://blog-sysadmin.archives.slashroot.fr/?p=1395 https://blog-sysadmin.archives.slashroot.fr/?p=1395#comments Sat, 15 Jul 2017 08:59:31 +0000 http://blog.slashroot.fr/?p=1395 # # Get-Lastlogon # # Auteur : Johan # Contact : johan@slashroot.fr # Date : 24/03/14 # Version : 1.0 # Description : Récupère la date de dernière connexion d'un utilisateur ou d'un ordinateur # Commentaire : Le lastlogon n'etant pas replique entre les DCs, le script recupere les valeurs de chaque DC puis selectionne la plus recente # Requis : Module ActiveDirectory # On importe le module ActiveDirectory Import-Module ActiveDirectory -ErrorAction SilentlyContinue # Si le module est bien présent if ($? -eq 'true') { # On lance la boucle pour chaque demande (utilisateur/ordinateur) do { # On lance la boucle pour la séléction du type (utilisateur ou ordinateur) afin de prendre en compte les fautes de frappe $i=0 while ($i -eq 0) { # Mise en forme de l'affichage echo "`nAfficher la date de derniere connexion d'un :`n" echo "1 - Utilisateur" echo "2 - Ordinateur`n" # Demande du type $choix = Read-host "Choix" echo "" # Demande du login utilisateur ou nom de machine puis test de l'existence du compte # Si l'utilisateur existe, on continue le script, sinon, on recommence le script switch ($choix){ 1 {$name = Read-host "Login de l'utilisateur "; echo "" ; if ((Get-ADUser -Filter {sAMAccountName -eq $name}) -ne $null) { $i=1 } else { echo "L'utilisateur n'existe pas !`n" }; break} 2 {$name = Read-host "Nom de la machine "; echo "" ; if ((Get-ADComputer -Filter {name -eq $name}) -ne $null) { $i=1 } else { echo "L'ordinateur n'existe pas !`n" }; break} default {"Mauvais choix !`n"; break} } } # On récupère la liste de tous les DC du domaine $liste_DC = (Get-ADDomainController -Filter *).HostName # On fixe les variables $lastLogon = 0 $logonDC = $null # Pour chaque DC du domaine foreach ($dc in $liste_DC) { # On formule la requête selon le type et on récupère la valeur switch ($choix){ 1 {$res = Get-ADUser $name -Properties LastLogon -Server $dc ; break} 2 {$res = Get-ADComputer $name -Properties LastLogon -Server $dc ; break} } # Si le lastlogon est plus récent, on prend la valeur et le nom du DC if ($lastLogon -lt $res.LastLogon) { $lastLogon = $res.LastLogon $logonDc = $dc } } # On converti le lastlogon au format date $lastLogon = [DateTime]::FromFileTime($lastLogon) # On affichage le lastlogon et le DC correspondant echo "Derniere connexion : $lastlogon" echo "Serveur : $logonDC`n" # On propose de relancer le script pour un autre compte $quit = Read-Host “On continue ? (O/n)” } until (($quit -eq “n”) -or ($quit -eq “N”)) } else { # Si le module est absent, on abandonne le script echo "Il faut le module ActiveDirectory !" } ]]> https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=1395 3 [Powershell] Lister les postes inactifs https://blog-sysadmin.archives.slashroot.fr/?p=1387 https://blog-sysadmin.archives.slashroot.fr/?p=1387#respond Fri, 14 Jul 2017 08:57:11 +0000 http://blog.slashroot.fr/?p=1387 # # Get-Inactive-Computers # # Auteur : Johan # Contact : johan@slashroot.fr # Date : 03/12/15 # Version : 1.0 # Description : Ce script récupère tous les postes présents dans la l'AD et dresse la liste des postes ne s'étants pas connectés depuis X mois # Commentaire : Le résultat est envoyé par email # Requis : Module ActiveDirectory # # Variables # # Base de recherche $base="OU=postes,DC=slashroot,DC=fr" # Seuil d'inactivité (en mois) $seuil="6" # Parametres de messagerie $expediteur = "bob@slashroot.fr" $destinataire = "admin@slashroot.fr" $serveur = "mx.slashroot.fr" # On filtre le résultat selon l'OS (on ne prend pas en compte les Linux) $os_filter="W*" # Date d'il y a X mois $date_seuil=$(Get-Date).addMonths(-$seuil) $resultat="" # # Au boulot # # On importe le module ActiveDirectory Import-Module ActiveDirectory -ErrorAction SilentlyContinue # Si le module est bien présent if ($? -eq 'true') { # Requête LDAP pour récupérer tous les postes Windows $strCategory = “computer” $objDomain = New-Object System.DirectoryServices.DirectoryEntry(“LDAP://$base”) $objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomain,”(&(objectCategory=$strCategory)(operatingSystem=$os_filter))”,@(‘name’)) $liste=$objSearcher.FindAll() | %{$_.properties.name} | sort # Liste de tous les DC du domaine $liste_DC = (Get-ADDomainController -Filter *).HostName # Pour chaque poste on récupère son lastlogon sur chaque DC afin de trouver le plus récent foreach ($poste in $liste) { # On fixe les variables $lastLogon = 0 $logonDC = $null # Pour chaque DC du domaine foreach ($dc in $liste_DC) { $res = Get-ADComputer $poste -Properties LastLogon -Server $dc # Si le lastlogon est plus récent, on prend la valeur et le nom du DC if ($lastLogon -lt $res.LastLogon) { $lastLogon = $res.LastLogon $logonDc = $dc } } # On converti le lastlogon au format date $lastLogon = [DateTime]::FromFileTime($lastLogon) # Si le lastlogon est plus vieux que le seuil fixé, on ajoute le poste à la liste (en ne gardant que la date JJ/MM/YYYY) if ($lastLogon -lt $date_seuil) { $resultat+="$poste - $lastLogon `r" } } # Si on a des postes problematiques if ( $resultat -ne "" ) { # On envoi le résultant par email $objet = "[Active Directory] Postes inactifs" $texte = "Bonjour,`r`rVoici la liste des postes ne s'étant pas connectés au domaine depuis plus de $seuil mois :`r`r$resultat`rCordialement`r--`rBob" $message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte $SMTPclient = new-object System.Net.Mail.SmtpClient $serveur $SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials $SMTPclient.Send($message) } } else { # Si le module est absent, on abandonne le script echo "Il faut le module ActiveDirectory !" } ]]> https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=1387 0 [Powershell] Liste des utilisateurs ne s’étant pas connectés au domaine depuis plus de 30 jours https://blog-sysadmin.archives.slashroot.fr/?p=626 https://blog-sysadmin.archives.slashroot.fr/?p=626#comments Thu, 12 Jul 2012 13:15:41 +0000 http://blog.slashroot.fr/?p=626 # Nom : Comptes_inactifs.ps1 # Date : 17/02/2012 # Auteur : Johan # Description : Liste les utilisateurs qui ne se sont pas connectés au domaine depuis # plus de 30 jours et envoi le résultat par mail # Commentaire : Exécution tous les 1er du mois # Recherche dans l'OU souhaité tous les comptes utilisateurs $ldapquery = [ADSI] 'LDAP://OU=Utilisateurs,DC=em-corporation,DC=fr' $objrechercher = New-object system.directoryservices.directorysearcher($ldapQuery) $objrechercher.filter ='(&(objectClass=person)(objectCategory=person))' $boucle = $objrechercher.findall() $liste="" # Fonction Get-UTCAge permettant de transformer la valeur du lastlogon en date afin de calculer le nombre de jours depuis la dernière connexion Function Get-UTCAge { Param([int64]$Last=0) if ($Last -eq 0) { } else { [datetime]$utc="1/1/1601" $i=$Last/864000000000 $lastlogon = ($utc.adddays($i)) $today=get-date $diff=($today)-($lastlogon) # Si l'utilisateur ne s'est pas connecté depuis au moins 30 jours on ajoute son nom à la liste if ($diff.Days -gt 30) { write "$name`r" } } } # Pour chaque utilisateur foreach ($user in $boucle) { # On vérifie qu'il possède une adresse email (permettant de différencier les comptes utilisateurs des comptes génériques ou applicatifs) if ($user.properties.mail) { # On récupère le nom et le lastlogon de l'utilisateur $name = $user.properties.name $last = $user.Properties.lastlogon $liste+=Get-UTCAge $user.properties.item("lastlogon")[0] } } # On prépare et on envoi le mail $expediteur = "bob@em-corporation.fr" $destinataire = " admin@em-corporation.fr" $serveur = "@MTA" $objet = "Active Directory - Utilisateurs inactifs" $texte = "Bonjour,`r`rVoici la liste des utilisateurs ne s'étant pas connectés au domaine depuis plus de 30 jours :`r`r$liste`rCordialement`r--`rBob" $message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte $SMTPclient = new-object System.Net.Mail.SmtpClient $serveur $SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials $SMTPclient.Send($message) ]]> https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=626 8 [Powershell] Envoyer un email https://blog-sysadmin.archives.slashroot.fr/?p=615 https://blog-sysadmin.archives.slashroot.fr/?p=615#respond Wed, 18 Apr 2012 09:42:04 +0000 http://blog.slashroot.fr/?p=615 Marche à suivre afin d’envoyer un email en Powershell :

$expediteur = "bob@em-corporation.fr"
$destinataire = "admin@em-corporation.fr"
$serveur = "@MTA"
$objet = "A propos de la réunion d'hier"
$texte = "Bonjour,`r`rJ'ai trouvé ça très bien`r`rCordialement`r--`rBob"

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte

$SMTPclient = new-object System.Net.Mail.SmtpClient $serveur
$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

$SMTPclient.Send($message)
]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=615 0
[Powershell] Script en tâche planifiée https://blog-sysadmin.archives.slashroot.fr/?p=381 https://blog-sysadmin.archives.slashroot.fr/?p=381#respond Thu, 01 Mar 2012 13:25:02 +0000 http://blog.slashroot.fr/?p=381 Lors de la création de l’action :

Programme/script :

powershell.exe

Ajouter des arguments (facultatif) : 

-noprofile -executionpolicy Unrestricted -file $CHEMIN$\script.ps1

Bien entendu si la policy d’exécution des script Powershell est déjà en Unrestricted il n’est pas necessaire de l’indiquer.

]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=381 0