FAQ Windows VistaConsultez toutes les FAQ

Nombre d'auteurs : 19, nombre de questions : 304, dernière mise à jour : 5 septembre 2013 

 
OuvrirSommairePowerShell


Avant de débuter l'apprentissage de PowerShell vous allez avoir besoin d'installer les composants suivants :

PowerShell se suffit à lui-même si vous êtes sous Windows Vista.
Le Service Pack 2 si vous êtes sous Windows XP
Le Service Pack 1 si vous êtes Windows Server 2003 (334 Mo)
Framework .net 2.0
Microsoft PowerShell (1,7 Mo)

Créé le 27 août 2007  par Arnaud Petitjean

Vous en avez marre de l'imprimante qui met une éternité pour imprimer ?
De cette file d'attente qui vous bloque votre impression ?

Ok, alors ce script est fait pour vous :

 
Sélectionnez

$obj = get-wmiobject -query "select * from win32_printer where name='Printer NB'"
$obj.CancelAllJobs() 
Créé le 27 août 2007  par Robin Lemesle

Voici un article intéressant pour débuter en PowerShell sur les opérations de comparaison (if then else) et sur les boucles (for each).

Cet article a été écrit par l'équipe de Microsoft, les scriptingguys. Pour le consulter, cliquez ici.

Créé le 27 août 2007  par Arnaud Petitjean

Attention : Pour que les exemples ci-dessous fonctionnent, PowerShell doit être au minimum en mode "RemoteSigned".
L'interpréteur de commandes PowerShell, comme toute commande, comprend aussi des paramètres.

Pour les obtenir, tapez l'intérieur depuis l'invite de commande standard de Windows (le bon vieux cmd.exe quoi !) : powershell.exe /?
Vous obtenez ceci :

 
Sélectionnez

powershell[.exe] [-PSConsoleFile <file> | -Version <version>]
    [-NoLogo] [-NoExit] [-NoProfile] [-NonInteractive]
    [-OutputFormat {Text | XML}] [-InputFormat {Text | XML}]
    [-Command { - | <bloc_script> [-args <tableau_arguments>]
                  | <chaîne> [<paramètres_commande>] } ]
 
powershell[.exe] -Help | -? | /?
 
?

La liste de paramètres est impressionnante me direz-vous ! Mais rassurez-vous, en usage interactif on ne se sert d'aucun de ces paramètres car on saisit directement les commandes à l'intérieur de la console. Cependant il est utile de savoir que vous pouvez lancer un script PowerShell directement sans entrer en mode interactif.
Imaginons que vous ayez développé un script PowerShell nommé Exemple1.ps1. Et bien vous pouvez l'exécuter en tapant la commande suivante :

 
Sélectionnez

C:\> powershell -command "& {c:\exemple1.ps1}"

ou

 
Sélectionnez

C:\> powershell c:\exemple1.ps1

ou encore (mais non recommandé !)

 
Sélectionnez

C:\> exemple1.ps1 


Ce mode de fonctionnement est intéressant pour intégrer des ?bouts de code? PowerShell à l'intérieur de vos scripts .bat existants. Comme par exemple dans le script de logon des utilisateurs ou bien encore pour lancer une tâche planifiée. Sachez également que par ce biais, PowerShell ne retourne que du texte et non plus des objets.
Vous pouvez aussi, au lieu d'appeler un script, faire exécuter les commandes de votre choix avec le paramètre -command et en respectant bien la syntaxe suivante :

 
Sélectionnez

C:\> powershell -command "&{get-command}"


Vous pouvez donc sur le même schéma créer des tâches planifiées sur votre système qui lanceront des scripts PowerShell.

Créé le 27 août 2007  par Arnaud Petitjean

Nous allons dans ce tutoriel créer un alias sur une commande externe, puis faire en sorte que cet alias reste lorsque nous quittons et relançons PowerShell.
Reprenons l'exemple du tuto sur l'envoi de données dans le presse-papier. L'utilitaire en question se nommait "clip.exe" et pour l'utiliser il fallait faire : ma-commande | clip
Admettez que cette ligne de commande n'est pas très jolie, car non conforme à la syntaxe PowerShell. Nous allons donc créer un alias répondant à un nom cohérent :

 
Sélectionnez

Set-Alias -name Out-Clipboard -value "c:\windows\system32\clip.exe"


L'alias Out-Clipboard est né !!! C'est de mon point de vue une commande qui faisait défaut à PowerShell.
Pour l'utiliser, rien de plus simple :

 
Sélectionnez

Get-Help Set-Alias | Out-Clipboard

Nous venons d'envoyer l'aide de la commande Set-Alias dans le presse-papier. Vous n'avez plus à aller dans votre éditeur préféré et faire Coller pour voir le résultat.
Maintenant que nous avons créé notre alias nous allons devoir faire en sorte de le sauvegarder sinon lorsque nous quitterons l'environnement PowerShell il sera perdu. C'est maintenant qu'intervient la notion de "profil utilisateur". Nous ferons plus tard un tutorial rien que sur les profils car il y a beaucoup à dire, mais pour le moment faisons les choses simplement.
Tapez la commande suivante :

 
Sélectionnez

PS C:\> $profile

C:\Documents and Settings\Administrateur\Mes documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
La variable $profile contient le chemin par défaut où se situe votre profil. C'est à l'intérieur de ce fichier que nous allons créer notre alias. Par défaut, bien que la variable soit initialisée à la bonne valeur, le profil n'est pas créé. Pour le vérifier, tapez la commande :

 
Sélectionnez

PS C:\> test-path $profile
 
False

La valeur retournée est à Faux, ce qui signifie que le fichier n'existe pas. Il faut donc bien créer notre profil. Pour se faire, tapez :

 
Sélectionnez

PS C:\> New-Item -path $profile -type file -force

Le paramètre -force sert ici à forcer la création du répertoire WindowsPowerShell, car par défaut celui-ci n'existe pas non plus.
Maintenant nous allons ouvrir notre fichier profil :

 
Sélectionnez

PS C:\> notepad $profile

Une fois le notepad ouvert, saisissez la ligne de commande que nous avons créée pour définir l'alias Out-Clipboard, sauvegardez le fichier et quittez le notepad. Maintenant, quittez PowerShell, relancez-le et testez notre alias pour vérifier qu'il existe toujours.
Attention : Pour que cela fonctionne, il ne faut pas que vous soyez en mode Restricted, mais au minimum en mode RemoteSigned.

Créé le 27 août 2007  par Arnaud Petitjean

Voici un petit script qui permet de connecter un lecteur réseau
Vous pouvez l'inclure dans un script de logon par exemple Wink si bien sur vous avez installé PowerShell sur l'ensemble des machines de votre réseau.

 
Sélectionnez

$obj = New-Object -com Wscript.Network 
$obj.MapNetworkDrive("x:", "\\serveur\partage") 
Créé le 27 août 2007  par Robin Lemesle

Votre script nécessite l'envoi d'un email ? Vous cherchez comment envoyer un email depuis Powershell ?
Pour envoyer des e-mails, PowerShell s'appuie sur la classe system.net.mail.smtpclient.
En effet cette classe est nouvelle dans la version 2.0 du framework .NET.
Elle permet à des applications d'envoyer des e-mails en employant le protocole SMTP (Simple Mail Transfer Protocol).

Pour construire un e-mails en utilisant le client SMTP, vous devez spécifier quelques informations :
le nom de la machine hôte (le serveur mail).
L'adresse de l'émetteur.
L'adresse du destinataire.
Le message proprement dit.

A noter que pour inclure une pièce jointe avec un E-mail, créer d'abord l'attachement en employant la classe d'attachement et ensuite ajouter la pièce jointe au message en employant la propriété de MailMessage.Attachments.

Voici un exemple d'envoi de message avec une pièce jointe.

 
Sélectionnez

$expediteur = " expediteur@host.comCet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir "
$destinataire = " destinataire@host.comCet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir "
$serveur = "mail.host.com"
$fichier = "c:\temp\monfichier.txt"
$objet = "Envoi de mail via powershell " + [System.DateTime]::Now
$texte = "texte"
 
$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
 
$attachment = new-object System.Net.Mail.Attachment
$fichier $message.Attachments.Add($attachment)
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
 
$client.Send($message)
Créé le 27 août 2007  par Robin Lemesle

Voici comment utiliser les paramètres pour votre script
Ex : ./monscript.ps1 -path "c:\temp" -value 1

 
Sélectionnez

Param ([string]$path, [int]$value) 
Write-host   ?le chemin est : $path et la valeur est : $value"
Créé le 27 août 2007  par Robin Lemesle

Voila de quoi enrichir votre profile.
Ces fonctions sont à enregistrer dans votre profile.ps1 qui est exécuté à chaque ouverture de session.

Si vous avez créé un profile fun et bigarré, n'hésitez pas à le poster dans le forum

Ajoutez un titre à votre fenêtre
ajouter un titre avec la methode set_windowtitle

 
Sélectionnez

$host.ui.RawUI.set_windowtitle("www.powershell-scripting.com")

Fonction pour modifier le prompt

 
Sélectionnez

function prompt
{
    Write-Host ("PS " + $(get-location) +">") -nonewline -foregroundcolor("yellow")
    return " "
}

Rajoutez vos fonction pour ne pas avoir à réécrire vos fonctions à chaque session, enregistrez les dans votre profile.
Exemple :

 
Sélectionnez

function moi  
{ 
 (get-location).path  
} 
Créé le 27 août 2007  par Robin Lemesle

Supposons que nous ne voulions pas avoir de sortie à l'écran lors de l'exécution d'une commande, mais que nous souhaitions plutôt obtenir le résultat dans le presse-papier.
Ceci nous permettrait de le coller dans l'application de notre choix.

Jusqu'à présent la méthode la plus conventionnelle consistait à rediriger le résultat de la commande dans un fichier texte, et à ouvrir ce dernier pour en copier le contenu.

Comment faire cela avec PowerShell ?
Malheureusement il n'existe pas de cmdlet PowerShell, il va donc falloir ruser un peu. Je vais vous expliquer une méthode possible mais il en existe certainement d'autres...

Il existe dans Windows Server 2003 une commande nommée Clip.exe (qui se trouve dans C:\windows\system32). Cette commande était auparavant uniquement disponible dans le Kit de Ressources Technique. Elle sert justement à faire ce que nous recherchons.

Voici donc un exemple d'utilisation :

 
Sélectionnez

PS C:\> Get-Command | clip

La liste des commandes PowerShell a été envoyée dans le presse-papier, vous n'avez donc plus qu'à ouvrir le bloc-notes, faire Coller et à admirer le résultat.

Pour les utilisateurs de Windows XP, il vous suffit de télécharger le fichier Clip.exe et de le mettre quelque part dans votre path ou tout simplement si vous n'avez pas d'idée dans C:\windows\system32.

Les utilisateurs de Windows Vista quand à eux n'ont rien à faire, car comme sous Windows 2003, la commande Clip fait partie du système d'exploitation.

Créé le 27 août 2007  par Robin Lemesle

Dans ce tutoriel nous allons vous apprendre comment récupérer des arguments passés en ligne de commande de façon à les réutiliser dans votre script.
Pour ce faire, nous allons utiliser la Variable automatique PowerShell « $Args »

$args est en fait un tableau contenant tous les arguments passés :
$args[0] vous renverra le 1er argument, args[1] le second et ainsi de suite.

Exemple

 
Sélectionnez

PS>C:\ .\mon-script.ps1 Salut

faire : $args[0] contiendra la chaîne « salut »

Petite application :
On veut calculer uniquement la somme des entiers passés en argument

 
Sélectionnez

$res=0
 
foreach($argument in $args)
 
{
if($argument -is [int])
{
$res += $argument
}
}
 
Write-host "La somme des arguments de type entier est : $res"
Créé le 27 août 2007  par Robin Lemesle

Si vous fouillez un peu dans Active Directory et que par exemple vous cherchez la date de dernier logon des utilisateurs, vous avez obtenu un chiffre hallucinant sur 64 bits !!!

Pas de panique, ce chiffre correspond aux dizaines de milliers de millisecondes écoulées depuis le 1er janvier 1601. Ne me demandez pas pourquoi !!! Et pas la peine d'utiliser votre calendrier perso, PowerShell est là !!!
Supposons que "$lastlogon" soit votre entier sur 64 bit ?

 
Sélectionnez

$date=(get-date ?year 1601 ?month 1 ?day 1 ?hour 0 ?minute 0 ?second 0)
$lastlogon /= 10000
$date_derniere_connexion = $date.addmilliseconds($lastlogon) 
Créé le 27 août 2007  par Robin Lemesle

Voici la ligne de commande pour créer un fichier

 
Sélectionnez

$file = new-item "c:\temp\essai.txt" ?type file -force 

L'option force permet d'écraser le fichier existant si ce fichier existait auparavant

Créé le 27 août 2007  par Robin Lemesle

Tout simplement en allant visiter notre page de " liens ".
Vous y trouverez des liens vers le site officiel de Microsoft, ainsi que des blogs de passionnés. Cette page sera mise à jour au fur et à mesure

Créé le 27 août 2007  par Arnaud Petitjean

Bonne nouvelle PowerShell est gratuit ! Disons plutôt que son prix est inclus dans celui de la licence de votre système.

Créé le 27 août 2007  par Arnaud Petitjean

Le principal reste celui de Microsoft (en anglais) : microsoft.public.windows.powershell

Créé le 27 août 2007  par Arnaud Petitjean

Non malheureusement ce n'est pas le cas ! D'ailleurs au jour d'aujourd'hui PowerShell pour Vista n'est toujours pas en version finale. Il semblerait que Microsoft éprouve quelques difficultés d'installation liées aux nouvelles règles de sécurité de Windows Vista.

Créé le 27 août 2007  par Arnaud Petitjean

Pour l'instant c'est un peu tôt pour se prononcer mais il y a de très fortes chances pour que ce soit le cas.

A priori PowerShell devrait être déployé sous forme de correctif (vu sa taille de 1,8 Mo) via Windows Update ou dans le prochain Service Pack.

Créé le 27 août 2007  par Arnaud Petitjean
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.