IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > PowerShell
        Quels sont les prérequis système pour installer PowerShell ?
        Vider la file d'attente d'une imprimante
        Constructions de PowerShell
        Utiliser un script depuis l'invite de commande (CMD)
        Out-Clipboard : Création d'un alias persistant
        Connecter un lecteur réseau
        Envoyer un e-mail
        Utilisez des parametres pour vos scripts
        Modifier son profile
        Envoyer le résultat d'une commande dans le presse-papier
        Récupérer les arguments nécessaires pour votre script
        Convertir la date retournée par Active Directory (1/1/1601)
        Comment créer un fichier?
        Où puis-je trouver des compléments d'informations sur PowerShell ?
        Combien coûte PowerShell ?
        Y-a-t-il des newsgroups sur PowerShell ?
        Est-ce que PowerShell est inclus dans Vista ?
        Est-ce que PowerShell est inclus dans Windows Server 2007 / Longhorn ?
        Y a-t-il des livres disponibles sur PowerShell ?



Quels sont les prérequis système pour installer PowerShell ?
auteur : Arnaud Petitjean

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 (22 Mo)
Microsoft PowerShell (1,7 Mo)


Vider la file d'attente d'une imprimante
auteur : Robin Lemesle
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 :

$obj = get-wmiobject -query "select * from win32_printer where name='Printer NB'"
$obj.CancelAllJobs() 

Constructions de PowerShell
auteur : Arnaud Petitjean
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.


Utiliser un script depuis l'invite de commande (CMD)
auteur : 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 :

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 :

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

C:\> powershell c:\exemple1.ps1
ou encore (mais non recommandé !)

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 :

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.


Out-Clipboard : Création d'un alias persistant
auteur : 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 :

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 :

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 :

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 :

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 :

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 :

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.


Connecter un lecteur réseau
auteur : Robin Lemesle
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.

$obj = New-Object -com Wscript.Network 
$obj.MapNetworkDrive("x:", "\\serveur\partage") 

Envoyer un e-mail
auteur : 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.

$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)

Utilisez des parametres pour vos scripts
auteur : Robin Lemesle
Voici comment utiliser les paramètres pour votre script
Ex : ./monscript.ps1 -path "c:\temp" -value 1

Param ([string]$path, [int]$value) 
Write-host   “le chemin est : $path et la valeur est : $value"

Modifier son profile
auteur : 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

$host.ui.RawUI.set_windowtitle("www.powershell-scripting.com")
Fonction pour modifier le prompt

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 :

function moi  
{ 
 (get-location).path  
} 

Envoyer le résultat d'une commande dans le presse-papier
auteur : 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 :

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.


Récupérer les arguments nécessaires pour votre script
auteur : 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

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

$res=0

foreach($argument in $args)

{
if($argument -is [int])
{
$res += $argument
}
}

Write-host "La somme des arguments de type entier est : $res"

Convertir la date retournée par Active Directory (1/1/1601)
auteur : 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 ?

$date=(get-date –year 1601 –month 1 –day 1 –hour 0 –minute 0 –second 0)
$lastlogon /= 10000
$date_derniere_connexion = $date.addmilliseconds($lastlogon) 


Comment créer un fichier?
auteur : Robin Lemesle
Voici la ligne de commande pour créer un fichier


$file = new-item "c:\temp\essai.txt" –type file -force 
L'option force permet d'écraser le fichier existant si ce fichier existait auparavant


Où puis-je trouver des compléments d'informations sur PowerShell ?
auteur : Arnaud Petitjean
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


Combien coûte PowerShell ?
auteur : Arnaud Petitjean
Bonne nouvelle PowerShell est gratuit ! Disons plutôt que son prix est inclus dans celui de la licence de votre système.


Y-a-t-il des newsgroups sur PowerShell ?
auteur : Arnaud Petitjean
Le principal reste celui de Microsoft (en anglais) : microsoft.public.windows.powershell


Est-ce que PowerShell est inclus dans Vista ?
auteur : 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.


Est-ce que PowerShell est inclus dans Windows Server 2007 / Longhorn ?
auteur : 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.


Y a-t-il des livres disponibles sur PowerShell ?
auteur : Arnaud Petitjean



Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

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 © 2006 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.