PowerShell sessioni remote e la portata domanda: Comandi sembrano funzionare a livello locale

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

  •  25-09-2019
  •  | 
  •  

Domanda

Ecco un esempio di script che i tentativi di creare una sessione remota su un server, quindi utilizzare WMI per ottenere un elenco di pool di applicazioni IIS del server, ed elencare i loro nomi:

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

Questa funzione è contenuta in un file chiamato "Test-Remoting.ps1." Apro PowerShell, CD nella directory che contiene il file, Dot-source il file in, e chiamare la funzione:

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

Ma il risultato di questo script è un elenco dei pool di applicazioni sul mio locale macchina e non TestServer.

In alternativa, se corro le seguenti linee (identici a quelli in funzione) manualmente al PowerShell prompt I do ottenere l'elenco delle piscine app sul server 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:\>

penso che ci sia un concetto che sono ignari, per quanto riguarda PowerShell remoting e la portata. Qualcuno può aiutare a spiegare questo comportamento?

È stato utile?

Soluzione

Credo Enter / Exit-PSSession si intende un uso più interattivo. Dalla aiuto Enter-PSSession:

SYNOPSIS
    Starts an interactive session with a remote computer.

In uno script, utilizzare New-PSSession e Invoke-Command in questo modo:

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

Aggiornamento: per eseguire uno script completo utilizzare in remoto il parametro FilePath su Invoke-Command:

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

In questo modo copiare lo script al computer remoto server01 ed eseguirlo lì con i parametri forniti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top