Question Problème PSREMOTE via tâche planifiée

Plus d'informations
il y a 10 mois 3 semaines - il y a 10 mois 3 semaines #33205 par stan
Bonjour,

Je ne sais pas si je poste dans la bonne section n'hésitez pas à me corriger si ce n'était pas le cas.

J'explique rapidement mon problème :

J'ai fait un script powershell qui me permet de check des réseaux distants (VPN) afin d'alerter si l'un d'eux tombe.

Pour 5 VPN j'envoi un email qui crée un ticket automatiquement sur notre instance GLPI.
Pour le dernier vpn qui est notre seul lien au serveur de messagerie et pour le lien internet je notifie 3 personnes en utilisant PSREMOTE sur le domaine puisque si l'un ou l'autre tombe je ne peux plus envoyer de mail.

Lorsque que je lance le script manuellement, tout est fonctionnel (mail, popup sur les pc, check, écriture dans le registre pour sauver l'état des liens).

Lorsque je le lance en tâche planifiée, avec un compte qui a les autorisation pour ouvrir une session en tant que tâche (j'ai testé aussi en mode service), il tourne bien toutes les 5mn, le check IP, la partie registre fonctionnent bien par contre toute la partie PSREMOTE ne fonctionne pas, je n'ai aucun popup sur les pc.

Voici le script en question :

#Global DEF
$Ips = @('IP INTERNET','VPN1','VPN2','VPN3','VPN4','VPN5','VPN_passerelle_email')
$index = @(0..6)
$alert = @()


#Loading Datas
Function loadRegData {
    $alert = @()
    $alert += Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\LNK\" -Name "Internet"
    $alert += Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\LNK" -Name "VPN1"
    $alert += Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\LNK" -Name "VPN2"
    $alert += Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\LNK" -Name "VPN3"
    $alert += Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\LNK" -Name "VPN4"
    $alert += Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\LNK" -Name "VPN5"
    $alert += Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\LNK" -Name "VPN_passerelle_email"

    return $alert
}

#Datas reg
Function saveRegDatas {
    Param($tabAlerte)
    if(Get-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "Internet") {
        Set-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "Internet" -Value $tabAlerte[0]
    } else {
        New-ItemProperty -Path "HKLM:\SOFTWARE\LNK" -Name "Internet" -Value $tabAlerte[0]  -PropertyType "Dword"
    }

    if(Get-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN1") {
        Set-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN1" -Value $tabAlerte[1]
    }else {
        New-ItemProperty -Path "HKLM:\SOFTWARE\LNK" -Name "VPN1" -Value $tabAlerte[1]  -PropertyType "Dword"
    }

    if(Get-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN2") {
        Set-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN2" -Value $tabAlerte[2]
    }else {
        New-ItemProperty -Path "HKLM:\SOFTWARE\LNK" -Name "VPN2" -Value $tabAlerte[2]  -PropertyType "Dword"
    }

    if(Get-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN3") {
        Set-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN3" -Value $tabAlerte[3]
    }else {
        New-ItemProperty -Path "HKLM:\SOFTWARE\LNK" -Name "VPN3" -Value $tabAlerte[3]  -PropertyType "Dword"   
    }

    if(Get-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN4") {
        Set-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN4" -Value $tabAlerte[4]
    }else {
        New-ItemProperty -Path "HKLM:\SOFTWARE\LNK" -Name "VPN4" -Value $tabAlerte[4]  -PropertyType "Dword"    
    }

    if(Get-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN5") {
        Set-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN5" -Value $tabAlerte[5]
    }else {
        New-ItemProperty -Path "HKLM:\SOFTWARE\LNK" -Name "VPN5" -Value $tabAlerte[5]  -PropertyType "Dword"    
    }

    if(Get-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN_passerelle_email") {
        Set-ItemProperty -Path "HKLM:\SOFTWARE\LNK\" -Name "VPN_passerelle_email" -Value $tabAlerte[6]
    }else {
        New-ItemProperty -Path "HKLM:\SOFTWARE\LNK" -Name "VPN_passerelle_email" -Value $tabAlerte[6]  -PropertyType "Dword"   
    }   
}

#Send email to helpdesk
Function sendMail {
    Param($Message)
    $smtpServer = "smtpserver"
    $smtpFrom = "sender"
    $smtpTo = "receiver"
    $messageSubject = 'VPN connexion issue'
    $messageBody = $Message

    $smtp = New-Object Net.Mail.SmtpClient($smtpServer)
    $smtp.Send($smtpFrom,$smtpTo,$messagesubject,$messagebody)
}

#Send popup to tech
Function sendPopup {
    Param($Popup)

    $Computers = 'pc concerné' 
    $msg = $Popup
    $Computers |
    ForEach-Object{
        $CmdMessage = Invoke-Command -ComputerName $_ -ScriptBlock { param($msg)  msg * "$Using:msg" } -argumentlist $msg
        $CmdMessage | Invoke-Expression
    } 
}
#Test links
Function testPing {

    $alert = loadRegData
    $retourMessage = ""
    $index |
    ForEach-Object {
         if( -not (Test-Connection -ComputerName $Ips[$_] -Count 2 -Delay 1 -Quiet)) 
         {
            $dateIncident = Get-Date -Format "MM/dd/yyyy HH:mm"
            if ($alert[$_] -le 3) {
               switch ( $_ )
                {
                    0 {
                        if($alert[$_] -eq 1) {
                            sendPopup "INTERNET LINK connection issue from * on " + $dateIncident
                        }
                        $alert[$_] = $alert[$_] + 1
                        break
                    }
                    1 {
                        if($alert[$_] -eq 2) {
                            sendMail "VPN1 connection issue from * on " + $dateIncident
                        }
                        $alert[$_] = $alert[$_] + 1
                    }
                    2 {
                        if($alert[$_] -eq 2) {
                            sendMail "VPN2 connection issue from * on " + $dateIncident
                        }
                        $alert[$_] = $alert[$_] + 1
                    }
                    3 {
                        if($alert[$_] -eq 2) {
                            sendMail "VPN3 connection issue from * on " + $dateIncident
                        }
                        $alert[$_] = $alert[$_] + 1
                    }
                    4 {
                        if($alert[$_] -eq 2) {
                            sendMail "VPN4 connection issue from * on " + $dateIncident
                        }
                        $alert[$_] = $alert[$_] + 1
                    }
                    5 {
                        if($alert[$_] -eq 2) {
                            sendMail "VPN5 connection issue from * on " + $dateIncident
                        }
                        $alert[$_] = $alert[$_] + 1
                    }
                    6 {
                        if($alert[$_] -eq 1) {
                            sendPopup "VPN_passerelle_email connection issue from * on " + $dateIncident
                        }
                        $alert[$_] = $alert[$_] + 1
                    }
                }  
            }
        } Else {
            $alert[$_] = 0
        }
    }
    saveRegDatas $alert
}

Function InitScript {
    if ((Get-ItemProperty -path "HKLM:\Software\LNK").Internet -eq $null )
    {
        $alert = @(0,0,0,0,0,0,0)
        saveRegDatas $alert
         
    } else {
        loadRegData
    }
    testPing
}

InitScript


Avez vous une idée sur ce problème ?

En vous remerciant par avance pour votre bienveillance.
 
Dernière édition: il y a 10 mois 3 semaines par stan.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 3 semaines #33212 par Laurent Dardenne
Salut,
en PSRemote on ne dispose pas de handle de fenêtre donc les popups graphiques sont impossibles.
Peut être utiliser les API TSE...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 3 semaines #33213 par Laurent Dardenne
Autre possibilité, utiliser WMI (pour changer de contexte ?) :
ebinissac.me/2017/03/15/how-to-display-a...er-using-powershell/

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 3 semaines - il y a 10 mois 3 semaines #33214 par stan
Bonjour Laurent,

merci beaucoup pour tes réponses.

En effet pas d'accès à l'UI en tant qu'utilisateur distant PSRemote, cependant j'ai pu faire fonctionner le script en tâche planifiée full distant de 3 manières.
  • Lancer la tâche avec un adm domaine.
  • Lancer la tâche avec le compte de service, et passer ce compte admin local des machines.
  • Lancer la tâche en tant que SYSTEM et passer le serveur admin local des machines..

L'adm intervient niveau machine je pense que c'est la différence, il peut agir sur la session en cours et lancer le popup.

J'ai 3 potentielles solutions au final :
  • Soit je trouve les bon droits pour faire le full distant.
  • Soit créer 2 tâches avec les 2 messages dont j'ai besoin sur la machine client que j'active selon le contexte (pas super propre).
  • Soit je gère le message à afficher dans un fichier txt ou dans le registre côté client et j'active une tâche qui lance le popup avec cette info.

Je regarde pour WMI c'est vrai que je n'y ai pas pensé non plus, si ça peut m'éviter de stoquer tâche et data côté client je suis preneur ^^

Je te tiens informé quant à la solution que j'ai trouvé.

Prends soin de toi d'ici la.
Dernière édition: il y a 10 mois 3 semaines par stan.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.071 secondes
Propulsé par Kunena