Ce script powershell permet de lancer des actions lors d’un changement de connexion réseau. Il est fait pour garder les pid des processus lancés et s’assure de les tuer une fois qu’on est plus sur le réseau en question. Je vous livre ici la version qui se déclenche avec un event réseau via une tâche planifiée, mais un script en format boucle est aussi disponible dans un gist github action_connection_loop.ps1.

Ce script permet de lancer un tunnel SSH vers un serveur et ensuite de lancer Proxifier afin de faire passer mon trafic ce manière sécurisé car mes deux types de VPN ne passaient pas sur ce réseau. Pourquoi faire cela ? Car sur ce réseau, de l’analyse des paquet https est faite via le firewall qui chiffre à la volée avec un certificat interne sur la machine du parc. Les mots de passe sont redevenus en claire pour le firewall….

Le script actions_connection_event.ps1

Ce script actions_connection_event.ps1 est à mettre dans un répertoire C:\Scripts :

[void][Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime]


$rootedConnexion="WIfiX","WifiY"

# can be a path
# or an array of 3 string : path / -argumentList / -WindowStyle
$exeToStart= @(
  @("ssh","home-socks -p 2222","hidden"),
 "C:\Program Files (x86)\Proxifier\Proxifier.exe"
)


$pidFile=$env:TEMP+'\tunnelSocksProcess.pid'

$connProfil = [Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile()
$actuelNetworkNames=$connProfil.GetNetworkNames()

# check if pid not already running
if (-not(Test-path $pidFile -PathType Leaf)) {
  if ($actuelNetworkNames -in $rootedConnexion) {
    foreach ($exe in $exeToStart) {
      if ($exe -is [array]) {
        Start-Process -FilePath $exe[0] -argumentList $exe[1] -WindowStyle $exe[2] -PassThru | select-object -ExpandProperty id | Out-File -Append -FilePath $pidFile
        # -PassThru return a process object # -ExpandProperty get only the value (no header)
      }
      else {
        Start-Process -FilePath $exe -PassThru | select-object -ExpandProperty id | Out-File -Append -FilePath $pidFile
      }
    }
  }
}
# if pid exist, check if network change
else {
  if (-not($actuelNetworkNames -in $rootedConnexion)) {
    #write-host "Network change"
    $currentPid=get-content -Path $pidFile
    stop-process -id $currentPid
    remove-item $pidFile
  }
}

#write-host "Actual network : $actuelNetworkNames"

Tâche planifiée

Pour tester la tâche planifiée, l’event choisi doit être :

  • Log : Microsoft-Windows-NetworkProfile/Operationel
  • Source : NetworkProfile
  • Event ID : 10000

Dans les actions, pour tester, faite avec une simple commande :

cmd.exe /c "echo network change && pause"

On n’oublie pas de désélectionner le fait de démarrer uniquement lorsque l’on est sur secteur.

On change de connexion pour le teste et une fois validé on va mettre la bonne action :

powershell.exe C:\Scripts\actions_connection_event.ps1
Summary
Lancement de tâches à un changement de connexion réseau
Article Name
Lancement de tâches à un changement de connexion réseau
Description
Ce script powershell permet de lancer des actions lors d'un changement de connexion réseau. Il est fait pour garder les pid des processus lancés et s'assure de les tuer une fois qu'on est plus sur le réseau en question.
Author