Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Powershell] Problème exception

Sujet résolu
    19 janvier 2018 à 15:36:47

    Bonjour,

    Je suis en train d'écrire un script Powershell qui permet de scanner tous les PC d'une plage réseau. Le nom DNS est ensuite récupéré pour pouvoir récupérer la version de Windows grâce à l'objet WMI "Win32_OperatingSystem". Je voudrait passer les IPs qui ne possèdent pas Windows, j'ai donc utilisé try / catch mais certaines machines relèvent tout de même des erreurs lors de l'utilisation de mon objet WMI, voici le code:

    $cred = Get-Credential
    
    for ($i = 100; $i -lt 231; $i++)
    { 
        $ip = "192.168.2.$i"
        $computer = "address='"+ $ip +"'"
        $obj = get-wmiobject -Class "Win32_PingStatus" -Filter $computer
        
        if( $obj.StatusCode -eq 0)
        {
            $dns = Resolve-DnsName $ip
            $dns = $dns.NameHost        
            try{
                $OS = Get-WmiObject -Computer $dns -Class Win32_OperatingSystem -Credential $cred
            } catch{
                continue
            }
            
            Write-Host "$dns is up with IP : $ip"
            $OS | Format-List Version
    
        }
    }

    Les erreurs principales sont: "Le nom DNS n’existe pas" "Le serveur RPC n’est pas disponible."

    • Partager sur Facebook
    • Partager sur Twitter
    la vérité se cache dans les eviers
      20 janvier 2018 à 14:42:45

      Bonjour. La section Langages.NET est plus précisément pour le C#, Visual Basic ou ASP.NET, comme indiqué dans la mini-description de la section visible en page d'accueil du forum. Je déplace ce topic en section Autres langages qui est donc plus appropriée.
      • Partager sur Facebook
      • Partager sur Twitter

      Moderateur forum || FAQ 3D || discord 3D francophone || OC Tweak script

        21 janvier 2018 à 15:14:44

        Bonjour,

        Powershell est un langage basé sur .NET, je pensais donc que la section était bien choisie

        • Partager sur Facebook
        • Partager sur Twitter
        la vérité se cache dans les eviers
          7 février 2018 à 10:49:20

          Bonjour, 

          Il faut savoir que PowerShell gère deux types d'exceptions. La première est bloquante, la seconde non.

          C'est ce second cas qui vous pose problème. Il est toutefois possible de rendre l'ensemble des exceptions bloquantes et donc les intercepter avec un Try/Catch.

          -1ière Méthode : Utilisation de la variable $ErrorActionPreference en début de script : 

          $ErrorActionPreference = 'Stop'
          $cred = Get-Credential
           
          for ($i = 100; $i -lt 231; $i++)
          { 
              $ip = "192.168.2.$i"
              $computer = "address='"+ $ip +"'"
              $obj = get-wmiobject -Class "Win32_PingStatus" -Filter $computer
               
              if( $obj.StatusCode -eq 0)
              {
                  $dns = Resolve-DnsName $ip
                  $dns = $dns.NameHost        
                  try{
                      $OS = Get-WmiObject -Computer $dns -Class Win32_OperatingSystem -Credential $cred
                  } catch{
                      continue
                  }
                   
                  Write-Host "$dns is up with IP : $ip"
                  $OS | Format-List Version
           
              }
          }

          -2ième cas : Utilisation du paramètre -ErrorActionPreference

          $cred = Get-Credential
           
          for ($i = 100; $i -lt 231; $i++)
          { 
              $ip = "192.168.2.$i"
              $computer = "address='"+ $ip +"'"
              $obj = get-wmiobject -Class "Win32_PingStatus" -Filter $computer
               
              if( $obj.StatusCode -eq 0)
              {
                  $dns = Resolve-DnsName $ip
                  $dns = $dns.NameHost        
                  try{
                      $OS = Get-WmiObject -Computer $dns -Class Win32_OperatingSystem -Credential $cred -ErrorAction 'Stop'
                  } catch{
                      continue
                  }
                   
                  Write-Host "$dns is up with IP : $ip"
                  $OS | Format-List Version
           
              }
          }

          Il est également possible de se passer du try/catch en passant la valeur SilentlyContinue au paramètre -ErrorAction de la commande Get-WmiObject.

          Pour plus d'information : Get-Help about_Try_Catch_Finally


          • Partager sur Facebook
          • Partager sur Twitter

          [Powershell] Problème exception

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown