2015-11-17 2 views
0

J'ai un script qui récupère certaines entrées du journal des événements à partir d'une liste d'ordinateurs. J'utilise une boucle foreach sur la liste des ordinateurs avec Get-EventLog -Computername $ c ... pour obtenir les événements. J'utilise Test-Connection MyComputer -Quiet pour m'assurer que chaque ordinateur est en place. Je ne peux pas comprendre comment tester par programme si Remoting est activé. J'ai essayéTest pour la communication à distance dans Powershell?

if (! (Test-WSMan MyComputer))

qui jette encore une erreur en essayant de se connecter à Remoting pour tester si Remoting est activé. On dirait un Catch-22. Vous ne pouvez tester que si Remoting est activé en vous connectant à Remoting et s'il n'est pas activé, vous obtenez une erreur.

J'ai également essayé de l'emballer dans un essai ... Catch mais cela n'a pas attrapé l'erreur.

Existe-t-il un moyen de vérifier, à l'intérieur d'un script, si un ordinateur dispose ou non d'un accès distant?

Remarque: J'utilise PowerShell 4.0 partout où PowerShell est installé.

+2

'-ErrorAction SilentlyContinue' – PetSerAl

+0

Vous devriez ajouter cela comme une réponse afin que je puisse le marquer. C'est beaucoup plus simple. Merci!! –

Répondre

0

Si tout ce que vous voulez est de supprimer un message d'erreur, alors -ErrorAction SilentlyContinue devrait en assez pour vous:

if (!(Test-WSMan MyComputer -ErrorAction SilentlyContinue)) 

Ou vous pouvez utiliser -ErrorAction Ignore, si vous ne voulez pas ajouter d'erreur à $Error variable automatique.

1

Vous pouvez utiliser cette fonction:

Function Test-PSRemoting 
{ 
Param($Computer) 

$ErrorActionPreference = "Stop" 
    Try 
    { 
     if ((Invoke-Command -ComputerName $Computer -ScriptBlock {1}) -eq "1") 
     { 
     return $true 
     } 

      else 
      { 
      return $false 
      } 
    } 

    Catch 
    { 
    return $false 
    } 

} 

utiliser comme ceci:

Test-PSRemoting ComputerName 
True 
+0

Parfait! Merci! –