Archive

Archives pour la catégorie ‘Powershell’

Les boucles While et Do/While

La boucle While.
C’est une boucle PowerShell que l’on peut traduire par « Tant que je gagne, je joue. ». Elle va tourner tant le résultat ne sera pas négatif.
Le principe le plus souvent utiliser est de fixer une variable de départ avant la boucle. Par exemple: $i=1.
La boucle va alors comparer la variable à une valeur de résultat While ($i -le 10).
Tant que le résultat de cette comparaison n’est pas négatif, elle va exécuter une commande ou un script et incrémenter la variable par $i++.

Voici un exemple complet:

$i=1
while ($i -le 10){
Write-Host $i
$i++
}

 

La boucle Do/While.
Elle correspond à « Je joue tant que je gagne ». Le résultat est est le même.
Une variable de départ est fixée. Toujours par exemple: $i=1.
Do { } va permettre d’exécuter un script ou une commande PowerShell et incrémenter la variable. Ensuite, While ($i -le 10) va relancer ou non la boucle.

Exemple:

$i=1
Do { 
Write-Host $i
$i++
} while ($i -le 10)

 
Question de goût. Mais à la fin vous aller perdre et la boucle va s’arrêter.

Categories: Powershell Tags: ,

Afficher et utiliser les variables d’environnement.

Il est parfois nécessaire d’utiliser une variable d’environnement dans un script.
Parmi les plus régulièrement utilisées, on retrouve le UserName ou le LogonServer.

Pour afficher la liste des variables d’environnement, lancez la commande:

Dir env:\

Pour en afficher une en particulier, exécutez par exemple la commande:

Get-Item env:\USERNAME

Pour ne retourner que la valeur.

(Get-Item env:\COMPUTERNAME).value

Un moyen plus simple va être d’utiliser $env. Par exemples:

$smtp = $env:username + '@mondomaine.fr'

Faire une boucle PowerShell avec une sortie (Y/N)

J’ai besoin d’exécuter plusieurs fois le même script PowerShell pour des actions répétitives en changeant juste un variable à chaque exécution.
Je souhaite donc que mon script continue à boucler tant que je n’aurais pas répondu Y à la question « Voulez-vous arrêter? (Y/N) ».
Voici un exemple de boucle qui va me permettre de réaliser mon script.

$quit = “Tant que je gagne, je joue.”
do {
#Début de mon script
$mareponse = Read-Host “Pierre, Feuille ou Ciseaux ?$sareponse = Get-Random "Pierre","Feuille","Ciseaux"
Write-host "L'ordinateur choisit au hasard: $sareponse"
#Fin de mon script
$quit = Read-Host “Voulez-vous arrêter? (Y/N)}
until ($quit -eq “Y”)
Categories: Powershell Tags: , ,

Afficher la version de PowerShell installée

Pour connaitre la version de Powershell installé sur votre poste ou serveur, il suffit de taper:

$psversiontable

 

Afficher la version de PowerShell

La valeur de PSVersion est la version de PowerShell installée.

Categories: Powershell Tags:

Créer une fonction PowerShell

Une fonction va vous permettre de créer votre propre commande PowerShell. Cette fonction exécutera toute une série de commandes à l’appel d’une seule.
 
Pour illustrer le fonctionnement voici un exemple:

J’ai créé un tableau à plusieurs colonnes.
 
list

Je voudrais une commande simple qui m’indique rapidement qui a un pantalon, qui a un vêtement rouge et qui a un chapeau rouge.
 
Le fichier get-vet.ps1 ci-dessous contient la fonction

function Get-Vet {
param ([string]$Genre,[string]$Couleur)
Get-Content .\list.txt | Where-Object { $_.split(",")[0] -match "$genre" -and $_.split(",")[1] -match "$couleur"} | Sort-Object
}

Il définit le nom de la commande, les deux paramètres possibles et la commande complète à exécuter pour obtenir le résultat.

Un fois enregistré, il faut charger la fonction avec la commande:

. .\get-vet.ps1

Et voila les résultats que je souhaitais:
 
Get-Vet

Categories: Powershell Tags: ,

Raccourcir une URL avec PowerShell

Un raccourcisseur d’URL… Vous trouverez surement plein de plugins ou sites qui le font. Alors pourquoi pas PowerShell?
Voici en deux lignes un script qui raccourci une adresse Internet un peu longue.
Le résultat est directement copié dans le presse-papier pour plus d’efficacité.

$url = Read-Host "Enter the Url"
Invoke-RestMethod -Uri "http://tinyurl.com/api-create.php?url=$url" | clip

Invoke-RestMethod est disponnible avec PowerShell V3.

Categories: Powershell Tags: , ,

Importer un fichier avec des accents et caractères spéciaux

Lors de la création par importation de comptes ou boites aux lettres, vous pouvez avoir à gérer des chaines de caractères avec des accents ou caractères spéciaux.
La cmdlet Import-CSV ne gère pas ces caractères. Il est nécessaire de convertir votre fichier txt ou csv au format Unicode avant de l’importer.
Sans cette conversion, les caractères é, ë, ç… seront transformés en « ? ».
Dans le script ci-dessous, je converti le fichier à importer avant la commande Import-CSV.

Get-Content -Path ./import.txt | Out-File -FilePath ./import-unicode.txt -Encoding Unicode
 
Import-Csv -Path ./import-unicode.txt | foreach {
$displayname = $_.LastName + " " + $_.FirstName
$displayname
}

Lancer une commande Dos avec une variable issue d’un import.

Utiliser PowerShell pour lancer par exemple un « reg query » ou tout autres commandes Dos sur une liste de PC présents dans un fichier texte.

$list = Import-CSV -Path "./comp-list.txt"
 
ForEach ($comp in $list) { 
    $ip = $comp.ip
    $cmdreg = "reg query \\$ip\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa"
    Invoke-Expression $cmdreg
 }

;)

Categories: Powershell Tags: , ,

Conserver le dernier mot de chaque phrases

Cette fois je souhaite conserver la dernière valeur des chaque chaines de caractères.

$songs= "My name is stain dfldsj","Reset after all pomaolk","Palabra mi amor piloeak"
foreach ($title in $songs) {
$title.Split(" ")[-1]
}
Categories: Powershell Tags:

Supprimer le dernier mot d’une ligne

Je souhaite retirer la dernière valeur de chaque chaines de caractères.

$songs= "My name is stain dfldsj","Reset after all pomaolk","Palabra mi amor piloeak"
foreach ($title in $songs) {
$Split = $title.Split(" ")
[string]$split[0..($Split.count-2)]
}
Categories: Powershell Tags: