PowerShell Fermeture de sessions ouvertes

Je suis en train de travailler sur une grande script où je lance un Foreach boucle, définir des variables dans cette boucle et ensuite vérifier si le $Server variable est pingable et si elle est accessible à distance.

Pour cela, j'utilise les fonctions suivantes provenant de l'aide de PowerShell:

# Function to check if $Server is online
Function CanPing ($Server) {
   $error.clear()
   $tmp = Test-Connection $Server -ErrorAction SilentlyContinue

   if ($?) {
       Write-Host "Ping succeeded: $Server"; Return $true
   }
   else {
        Write-Host "Ping failed: $Server."; Return $false
   }
}

# Function to check if $Server is remotely accessible
Function CanRemote ($Server) {
    $s = New-PSSession $Server -Authentication Credssp -Credential $Credentials -Name "Test" -ErrorAction SilentlyContinue

    if ($s -is [System.Management.Automation.Runspaces.PSSession]) {
        Enter-PSSession -Session $s
        Exit-PSSession
        Write-Host "Remote test succeeded: $Server."; Return $true
    }
    else {
        Write-Host "Remote test failed: $Server."; Return $false
    }
}

# Execute functions to check $Server
if ($Server -ne "UNC") {

    if (CanPing $Server) {
        if (-Not (CanRemote $Server)) {
        Write-Host "Exit loop REMOTE" -ForegroundColor Yellow
        continue
        }
    }
    else {
         Write-Host "Exit loop PING" -ForegroundColor Yellow
         continue # 'continue' to the next object and don't execute the rest of the code, 'break' exits the foreach loop completely
    }
} 

À chaque fois lorsque j'exécute ce code, un processus est créé sur le serveur distant appelé wsmprovhost.exe. Ce processus représente la session PowerShell, si les infos que j'ai trouvées sur le web est correct. Toutefois, lorsque vous faites des Get-PSSession $Server il n'y a pas d'ouvrir des sessions affichées dans le PowerShell ISE, même si les processus sont visibles sur le serveur distant et ne peuvent être tués avec le Gestionnaire de Tâches.

Lorsque j'exécute ce code, souvent à la limite de sessions ouvertes est atteint parce que chaque fois qu'un nouveau processus de wsmprovhost.exe est ajouté à la $Server et la commande d'erreur. J'ai essayé de résoudre ce problème en ajoutant Exit-PSSessionpour le code, mais il ne ferme pas la session.

De l'aide ou des idées sont plus que bienvenus.

InformationsquelleAutor DarkLite1 | 2014-06-15