Powershell Sessões remotas e escopo Pergunta: Os comandos parecem ser executados localmente

StackOverflow https://stackoverflow.com/questions/2196343

  •  25-09-2019
  •  | 
  •  

Pergunta

Aqui está um script de amostra que tenta criar uma sessão remota em um servidor e, em seguida, use o WMI para obter uma lista dos pools de aplicativos do IIS do servidor e listar seus nomes:

    function Test-Remoting
    {
        [CmdletBinding()]
        param
        (    
        )
        begin
        {
            Enter-PSSession TestServer
            $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
            $appPools | ForEach-Object {
                $appPool = $_;
                $appPool.Name
            }
            Exit-PSSession
        }    
    }

Esta função está contida em um arquivo chamado "test-remoting.ps1". Abro o PowerShell, CD no diretório que contém esse arquivo, doutor o arquivo e chamo a função:

PS C:\Users\moskie> . .\Test-Remoting.ps1
PS C:\Users\moskie> Test-Remoting

Mas o resultado deste script é uma lista dos pools de aplicativos no meu local máquina e não TestServer.

Como alternativa, se eu executar as seguintes linhas (idênticas às da função) manualmente no prompt PowerShell, eu Faz Obtenha a lista de pools de aplicativos no servidor remoto:

PS C:\Users\moskie> Enter-PSSession TestServer
[TestServer]: PS C:\> $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
[TestServer]: PS C:\> $appPools | ForEach-Object { $appPool = $_; $appPools.Name }
<a list of the names of the application pools on TestServer>
[TestServer]: PS C:\>

Eu acho que há um conceito que sou alheio, em relação a PowerShell Rusting and Scope. Alguém pode ajudar a explicar esse comportamento?

Foi útil?

Solução

Acredito que Enter/EXIT-Pssession significa uso mais interativo. Da ajuda Enter-Pssession:

SYNOPSIS
    Starts an interactive session with a remote computer.

Em um script, use o novo-Pssession e invoque o comando assim:

$session = New-PSSession server01
Invoke-Command -Session $session {hostname}
Remove-PSSession -Session $session

Atualizar: Para executar um script completo, use remotamente o parâmetro FilePath no Invoke-Command:

icm server01 -FilePath C:\users\keith\myscript.ps1 -arg 1,2

Isso copiará o script para o Remote Computer Server01 e o executará lá com os parâmetros fornecidos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top