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-PSSession
pour le code, mais il ne ferme pas la session.
De l'aide ou des idées sont plus que bienvenus.
Vous devez vous connecter pour publier un commentaire.
Le problème est que l'Entrée-PSSession. Entrez-PSSession ne peut être utilisé de manière interactive, vous ne pouvez pas l'utiliser dans un script. Je proposerais quelque chose comme ceci:
Remove-PSSession
fait le tour, je vous remercie pour vos conseils. C'est toujours étrange de ne pas être en mesure de saisir que la session à distance à partir de l'intérieur dans un script, mais cette solution est très bien pour moi.Si j'ai bien compris, Votre distance
ps-session
ne sont pas d'être fermé.À mon understaning,
Get-PSSession
montrera la session jusqu'à ce que votre session localeest en vie (je veux dire de la session de la création de la distance
ps-session
) mais une fois que votre session localese termine
Get-PSSession
ne sera pas montrer leur cause, ils ne sont plus en direct sur votre ordinateurplutôt sur le système distant (ou) ils ne sont plus dans les locaux de la session.
Vous pouvez obtenir de la session à l'aide de la commande
Si vous voulez les supprimer, vous pouvez faire comme
Get-PSSession -ComputerName server_name
mais il ne m'a pas donné de résultats, mais le processus où encore visibles sur le serveur distant. C'était sans doute parce que, comme vous l'avez dit, la session locale était déjà fermée quand le script terminé. Je ne pense pas que ce, comme je m'y attendais toujours de voir toutes les sessions ouvertes lors de l'exécution de la commandeGet-PSSession -ComputerName server_name
, mais ce n'est pas le cas apparemment. Merci encore pour votre aide.Get-PSSession
montrera la session seulement, quand ils sont vivants. Vous êtes les bienvenus.Même Après l'exécution de la commande ci-dessous également, si vous n'êtes pas en mesure de créer une session
S'il vous plaît, Redémarrez le service Gestion à Distance de Windows (WS-Management) dans la machine cible.