Exit not Exiting в invoke-command в удаленном сеансе ps

У меня есть функция вызывает команду, которая запускает новый сеанс PS на удаленном сервере. Команда invoke имеет предложение Exit, однако это не выход?

Function CreateID{

  Invoke-Command -Session $Script:sesh -ScriptBlock{
    Set-Location c:\
    Import-Module ActiveDirectory

    Try
    {
        If (Get-ADGroupMember "$Using:IDGroup" | Where-Object Name -match 
    "$Using:Computer")
        {
            Write-Host "Already in $using:IDGroup Exiting Script"
            Disconnect-PSSession -Session $Script:sesh
            Exit-PSSession
            Exit
        }
     }
     Catch
     { }
     Write-Host "Did not Exit"


    }

}

Команда Get-AD работает нормально, поэтому там, где она не должна отображать "не завершено", она работает - как я могу выйти из блока сценариев в удаленном сеансе PS?

Я пробую сеанс отключения и Exit-pssession, чтобы увидеть, будут ли они делать то же самое, что и просто выход, но ни один из них не работает.

Я также попробовал Break и не повезло.

3 ответа

Я не знаю, работает ли это для PSSession или нет, и у меня нет среды для его тестирования, но вы можете использовать это для выхода из powershell в рамках попытки try

[Environment]::Exit(0)

Итак, я понял это - сессия ps и команда invoke- красные сельди. Основой этого является то, что вы не можете выйти из оператора Try/Catch.

Я должен был сделать это, чтобы заставить его работать - теперь это Выход. Я просто не могу использовать Try/ Catch - если кто-нибудь знает, как выйти из Try/Catch, дайте мне знать!

#Try
#{
    If (Get-ADGroupMember "$Using:IDGroup" | Where-Object Name -match 
"$Using:Computer")
    {
        Write-Host "Already in $using:IDGroup Exiting Script"
        Disconnect-PSSession -Session $Script:sesh
        Exit-PSSession
        Exit
    }
 #}
 #Catch
 #{ }

Try/Catch должен работать в команде invoke. Я обычно не вызываю команды для сессий, я использую -ComputerName.

Это работало нормально для меня:

invoke-command -ComputerName "MyDomainController" -ScriptBlock {
    try { get-aduser "ValidUser" } catch { "doh!" }
}

Я только что попробовал это, и это также сработало:

$sess1 = New-PSSession -ComputerName MyDomainController
invoke-command -Session $sess1 -ScriptBlock { try { get-aduser "ValidUser" } catch { "doh!" } }

Если я изменю любое из этих значений "ValidUser" на недопустимых пользователей, я вижу "doh!" также.

Возможно, это потому, что вы пытаетесь завершить сеанс изнутри сеанса. Вы должны иметь дело с выводом команды invoke или функции, а затем обрабатывать сессию, основываясь на этом.

Как, например, использовать мой неудачный пример...

$sess1 = New-PSSession -ComputerName MyDomainController
$DoStuff = invoke-command -Session $sess1 -ScriptBlock { try { get-aduser "ValidUser" } catch { "doh!" } }
If ($DoStuff -eq "doh!") { Remove-PSSession $sess1 } else { $DoStuff }
Другие вопросы по тегам