FAQ Windows Vista
FAQ Windows VistaConsultez toutes les FAQ
Nombre d'auteurs : 19, nombre de questions : 304, dernière mise à jour : 16 juin 2021
- 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 ?
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)
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()
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.
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.
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.
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")
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)
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"
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
}
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.
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"
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)
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
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
Bonne nouvelle PowerShell est gratuit ! Disons plutôt que son prix est inclus dans celui de la licence de votre système.
Le principal reste celui de Microsoft (en anglais) : microsoft.public.windows.powershell
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.
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.
Il n'y a malheureusement pour l'instant que des livres américains
En attendant de vous mettre le notre sous la dent, en voici un certain nombre (classés par date de parution) :
Professional Windows PowerShell, Wrox, Andrew Watt, 600p, Mars 2007
Windows PowerShell in action, Manning Publication, Bruce Payette, 456p, Janvier 2007
PowerShell TFM, Sapien Press, Don Jones & Jeffery Hicks, 470p, 2006
Microsoft Windows Powershell Programming for the Absolute Beginner, Course Technology PTR, Jerry Lee Ford Jr., 376p, Dec. 2006
Windows PowerShell Quick Reference, O'Reilly, Lee Holms, 120p, Sept. 2006