De VBS à PowerShell
Introduction
Dans ce chapitre, nous allons voir comment passer du langage VBS, VBScript, à PowerShell.
Nous ne verrons pas comment apprendre à traduire complètement un script existant en VBScript vers PowerShell, mais nous étudierons les équivalences entre certaines commandes (les plus connues) en VBScript avec PowerShell.
Dans un second temps, nous prendrons quelques exemples de scripts en VBS pour les traduire ensuite en PowerShell.
PowerShell vs VBScript
Avant l’arrivée de PowerShell, un des langages les plus utilisés était VBScript. Ce langage permettait de réaliser des scripts puissants et complexes et même de créer des interfaces graphiques en utilisant le lien entre VBScript et HTML nommé HTA.
Alors que VBScript s’appuie sur les composants COM, PowerShell quant à lui s’appuie sur le framework .NET lui permettant d’utiliser davantage d’applications que VBS. En effet, PowerShell ayant accès à toutes les bibliothèques .NET, il sera possible de faire la même chose qu’avec du C#.
PowerShell peut s’exécuter aussi bien en mode console, c’est-à-dire via l’exécution de commandes dans l’invite de commandes PowerShell, que par script.
VBScript, quant à lui, ne possède pas d’invite de commandes, il faudra donc créer un fichier VBS pour exécuter ou tester vos actions.
Équivalences entre VBS et PowerShell
1. Équivalence de commandes
Dans un premier temps, nous allons lister ci-dessous quelques-unes des commandes les plus utilisées en VBScript pour en montrer l’équivalence en PowerShell par catégories d’actions.
a. Commandes de gestion des fichiers/dossiers
Action |
VBScript |
PowerShell |
Création d’un dossier |
FileSystemObject.CreateFolder |
New-Item -Type Folder |
Création d’un fichier |
FileSystemObject.CreateFile |
New-Item -Type File |
Suppression d’un dossier |
FileSystemObject.DeleteFolder |
Remove-Item |
Suppression d’un fichier |
FileSystemObject.DeleteFile |
Remove-Item |
Copie d’un fichier |
FileSystemObject.CopyFile |
Copy-Item |
Déplacer un fichier |
FileSystemObject.MoveFile |
Move-Item |
b. Commandes système
Action |
VBScript |
PowerShell |
Création d’un objet |
CreateObject |
New-Object -ComObject |
Configurer une variable |
DIM variable Variable = valeur |
$Variable = "valeur" |
Afficher du texte |
WScript.Echo |
Write-Host Write-Ouptut |
Mettre en pause |
Sleep |
Start-Sleep |
Se placer dans un répertoire |
Set obj = CreateObject("wscript.shell") obj.CurrentDirectory = "Chemin" |
Set-location |
Arrêt processus |
objProcess.Terminate() |
Stop-Process |
Chercher un terme |
InStr |
Select-String |
Nom du poste |
Set obj = CreatObject("wscript.network") obj.ComputerName |
$env:computername |
2. Les variables
a. En VBScript
Dans le langage VBScript, la déclaration d’une variable se fait à l’aide de la commande Dim.
Ci-dessous, nous créons une variable nommée variable dont le contenu sera "Bienvenue dans notre livre" :
Dim variable
variable="Bienvenue dans notre livre"
Nous allons ensuite afficher le contenu de cette variable à l’aide de la commande echo.
WScript.Echo Variable
b. En PowerShell
La création d’une variable en PowerShell se fait en utilisant le caractère $ suivi du nom de la variable.
Ci-dessous la création de la même variable que précédemment :
$variable="Bienvenue dans notre livre"
Pour afficher le contenu, nous utiliserons la cmdlet Write-host, tel que ci-dessous :
Write-host $variable
3. Test d’existence de contenu
a. En VBScript
Test d’existence d’un dossier
Le test de présence d’un dossier en VBScript s’effectue ainsi :
Dim fso ...
De VBScript à PowerShell en exemple
1. Notre script de test
Dans cet exemple, nous allons étudier un script très simple en VBScript pour ensuite voir l’équivalent en PowerShell.
Ce script fera les actions suivantes :
-
Affichage d’un message à l’utilisateur pour saisir une réponse : oui ou non.
-
Si oui, on continue le script.
-
Affichage d’un message à l’utilisateur pour saisir un chiffre entre 2 et 10.
-
Parcours des valeurs entre 1 et le numéro saisi.
-
Affichage de la valeur entre les deux intervalles.
2. Le script en VBScript
Ci-dessous le script concerné en VBScript :
Dim Choix
Choix = InputBox("Souhaitez-vous continuer (Oui/Non) ?")
wscript.echo "Votre choix est : " & Choix
If Choix="oui" Then
wscript.echo "Nous continuons"
Chiffre = InputBox("Saisissez un chiffre entre 2 et 10:")
For i = 1 To Chiffre
wscript.echo i
Next
Else
wscript.echo "On ne continue pas"
End If
3. Le script en PowerShell
Ci-dessous le script concerné en PowerShell :
$Choix = Read-Host "Souhaitez-vous continuer (Oui/Non) ?"
write-host "Votre choix est : $Choix"
If($Choix -eq "Oui")
{
write-host...