退出不在远程ps会话中的invoke-command中退出

时间:2018-03-14 20:43:34

标签: powershell exit scriptblock

我有一个函数调用一个命令,在远程服务器上启动一个新的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会话中的scriptblock?

我正在尝试断开会话和Exit-pssession,看看他们是否会像退出那样做同样但没有一个能正常工作。

我也尝试过休息而没有运气。

3 个答案:

答案 0 :(得分:0)

好的,所以我想出来了 - ps会话和invoke-command是红色的鲱鱼。这样做的基础是你不能退出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
 #{ }

答案 1 :(得分:0)

我不知道这是否适用于PSSession,我没有测试它的环境,但您可以使用它在try catch中退出powershell

[Environment]::Exit(0)

答案 2 :(得分:0)

Try / Catch应该在invoke-command中工作。 我通常不会对会话调用命令,而是使用-Co​​mputerName。

这对我来说很好:

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-command或函数的输出,然后根据它处理会话。

喜欢使用我的蹩脚例子......

$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 }