Vérifier la présence d’un dossier avant de le créer
Une petite ligne rapide pour tester la présence d’un dossier et le créer si absent.
If (-not (Test-Path "dossier_test")) { New-Item -ItemType Directory -Name "dossier_test" } |
Une petite ligne rapide pour tester la présence d’un dossier et le créer si absent.
If (-not (Test-Path "dossier_test")) { New-Item -ItemType Directory -Name "dossier_test" } |
Mon problème, j’utilise plusieurs appareils photos et mon smartphone pour immortaliser ma petite famille. De ce fait, je me retrouve avec des photos DSC… partout. Je souhaite les classer chronologiquement avec Powershell.
De nombreux programme sous Windows le font en se basant sur EXIF.
Mais quoi de mieux que le faire soit même en Powershell.
Grâces aux Métadonnées EXIF voici ce qu’il est possible de faire.
[reflection.assembly]::loadfile( "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll") > $null if ((Test-Path -path "Result") -ne $True) { New-Item -Name "Result" -type directory } $Files = Get-ChildItem -filter *.jpg foreach ($file in $Files) { $foo=New-Object -TypeName system.drawing.bitmap -ArgumentList $File.fullname $date = $foo.GetPropertyItem(36867).value[0..20] $arYear = [Char]$date[0],[Char]$date[1],[Char]$date[2],[Char]$date[3] $arMonth = [Char]$date[5],[Char]$date[6] $arDay = [Char]$date[8],[Char]$date[9] $strYear = [String]::Join("",$arYear) $strMonth = [String]::Join("",$arMonth) $strDay = [String]::Join("",$arDay) $DateTaken = $strYear + "-" + $strMonth + "-" + $strDay $time = [Char]$date[11],[Char]$date[12],[Char]$date[14],[Char]$date[15],[Char]$date[17],[Char]$date[18] $strtime = [String]::Join("",$time) $taken = $DateTaken + "-" + $strtime + ".jpg" $TargetPath = ".\result\" + $taken Copy-Item -PassThru $File.fullname -Destination $TargetPath } |
Après une migration AD entre deux domaine avec des outils comme ADMT, il est important de supprimer les sIDHistory sur les comptes du domaine cible.
Cette opération va permettre également de réduire la taille du Token Kerberos.
Get-QADUser "Chuck Norris" | %{Set-QADUser $_ -ObjectAttributes @{sIDHistory=@{delete=$_['sIDHistory']}}} |
Cette commande vous permet de lister uniquement les répertoires et sous-répertoires du dossier courant.
Sans le filtre, Get-ChildItem vous affiche les dossiers et les fichiers.
Get-ChildItem -Recurse | Where-Object { $_.PSIsContainer } | Select-Object Name,Fullname |
Cela ne va pas servir tous les jours mais voici comment obtenir les dimensions d’une image avec Powershell.
$image = New-Object -ComObject Wia.ImageFile $image.LoadFile(".\image.jpg") $image.Width, $image.Height |
Voici comment générer un nombre aléatoire à 4 chiffres.
$rand = New-Object System.Random [char]$rand.next(1000,9999) |
Un moyen simple permet de convertir un chaîne de texte au format nom propre.
(Get-Culture).TextInfo.ToTitleCase("string") |
Cette méthode peut gérer les espaces, « , », « - » et « _ ». tous les mots de la chaîne seront traités.
La première lettre de chaque mots sera mise en majuscule et le reste n minuscule.
A la manière d’un Grep sous Unix, il est possible avec la commande Select-String de rechercher un texte dans un fichier de logs.
Select-String -Path .\test.txt -Pattern "rechercher ce texte" -Context 0,2 |
Avec le paramètre Context, il est possible d’afficher les lignes précédentes ou suivant à la ligne ou se trouve le texte recherché.
Voici une ligne de commande utile pour exporter la liste des comptes d’ordinateurs d’une OU en vu de faire un peu de ménage.
Get-QADComputer -IncludeAllProperties -SearchRoot domain.local\Paris -Sizelimit 0 | Select-Object cn,OSName,OSServicePack,pwdlastset,ParentContainer | Export-Csv -Path Paris_Computers_List.csv |
Voici comment effectuer une recherche DNS avec Powershell à partir d’un FQDN ou d’une adresse IP.
A partir du nom complet DNS:
[System.Net.Dns]::GetHostAddresses('server001.domain.com') | fl |
A partir de l’dress IP.
[System.Net.Dns]::GetHostbyAddress('192.168.4.67') | fl |