Dans ce billet je vais présenter la construction d’un petit script permettant d’activer ou de désactiver une ou plusieurs carte réseau de votre station de travail. Pour rappel powershell est une interface dite en « ligne de commande » développé par Micrososft. Il utilise la notion d’objet et vous permet d’interagir avec votre système de façon « automatisé ». A la différence du « batch » il permet beaucoup plus de possibilités et d’actions.
Vous pouvez développer des script powershell via un simple éditeur de texte en sauvegardant vos fichiers au format .ps1, veillez à ne pas cumuler les extensions ( ex : script.ps1.txt)
Pour l’exécuter, faite un clique droit puis valider avec « Exécuter avec Powershell » comme sur la capture d’écran ci-dessous. Si vous désirez utiliser un invite de commande pour tester votre script vérifiez que les fichiers en PS1 sont executé avec le module powershell et non pas le bloc note.
Vous trouverez l’exécutable dans C:\Windows\System32\WindowsPowerShell\v1.0
Pour créer le script d’activation, on va commencer par lister les cartes réseaux de votre station de travail avec la commande ci-dessous. En cas de doute comparez simplement les adresses MAC de vos cartes afin de déterminer clairement sur quelle carte vous allez travailler.
Une fois votre carte identifiée, récupérer son DeviceID
Le script est très simple, il va se composer d’une interaction avec l’utilisateur lui demandant de saisir son choix. En l’occurrence Activation ou Désactivation(tout deux représenté par A ou D).
Pensez à exécuter le script en administrateur, si vous vous trouvez sur un domaine je détail plus bas un morceau de code vous permettant d’exécuter le script avec le login de votre choix.
Pensez à adapter votre DeviceID sur la ligne du script ci-dessous
Activer_ou_desactiver_carte_ethernet.ps1
$choix=Read-Host "Voulez vous activer ou désactiver votre carte ?(a/d)"
while ($choix -ne "a" -or $choix -ne "d" ) {
clear-host
echo "Votre saisie est incorrect"
echo "veillez à utiliser [a] pour activer et [d] pour désactiver"
echo "[=================================================================]"
$choix=Read-Host "Voulez vous activer ou désactiver votre carte ?(a/d)"
echo "[=================================================================]"
}
$ethernet = Get-WmiObject win32_NetworkAdapter | where {$_.DeviceID -eq 7}
if ($choix -eq "a") {
$ethernet.Enable()
}
ElseIf($choix -eq "d") {
$ethernet.Disable()
}
Si vous vous trouvez sur un domaine ou que vous souhaitez exécuter le script depuis des identifiants différents de ceux sur lequel vous êtes logué analysez le script ci-dessous. J’y ai rajouté un morceaux de code vous permettant de choisir sous quelle identité vous souhaitez exécuter le script.
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
# Get the security principal for the Administrator role
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
# Check to see if we are currently running "as Administrator"
if ($myWindowsPrincipal.IsInRole($adminRole))
{
# We are running "as Administrator" - so change the title and background color to indicate this
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(COMMANDER LAUNCHER)"
$Host.UI.RawUI.BackgroundColor = "DarkRed"
clear-host
}
else
{
# We are not running "as Administrator" - so relaunch as administrator
# Create a new process object that starts PowerShell
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
# Specify the current script path and name as a parameter
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
# Start the new process
[System.Diagnostics.Process]::Start($newProcess);
# Exit from the current, unelevated, process
exit
}
#Début du code avec les droits fourni par l'utilisateur
$choix=Read-Host "Voulez vous activer ou désactiver votre carte ?(a/d)"
while ($choix -ne "a" -or $choix -ne "d" ) {
clear-host
echo "Votre saisie est incorrect"
echo "veillez à utiliser [a] pour activer et [d] pour désactiver"
echo "[=================================================================]"
$choix=Read-Host "Voulez vous activer ou désactiver votre carte ?(a/d)"
echo "[=================================================================]"
}
$ethernet = Get-WmiObject win32_NetworkAdapter | where {$_.DeviceID -eq 7}
if ($choix -eq "a") {
$ethernet.Enable()
}
ElseIf($choix -eq "d") {
$ethernet.Disable()
}
NB: Je suis incapable de remettre la main sur la source du morceau de code permettant une autre identification pour le script, si par hasard quelqu’un peut le communiquer je l’ajouterai à la source de fin de billet.
Pour que cela fonctionne, il faut que le script soit exécuté en mode administrateur.
J’ai créé un raccourcis sur le fichier .ps1 puis ajouté « PowerShell -f » devant le nom du fichier dans le raccourcis (Onglet « Raccourcis » champ « Cible… ») et enfin coché la case « Exécuter en tant qu’administrateur » dans « Avancé… » de l’onglet « Raccourcis ».