Las sesiones remotas PowerShell y el alcance pregunta: Comandos parecen funcionar localmente

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

  •  25-09-2019
  •  | 
  •  

Pregunta

Aquí hay un script de ejemplo que intenta crear una sesión remota en un servidor, a continuación, utilizar WMI para obtener una lista de grupos de aplicaciones de IIS del servidor, y la lista de sus nombres:

    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 función está contenida en un archivo llamado "Test-Remoting.ps1." Abro PowerShell, CD en el directorio que contiene este archivo, punto de código en el archivo, y llama a la función:

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

Sin embargo, el resultado de este script es una lista de los grupos de aplicaciones en mi locales de la máquina, y no TestServer.

Por otra parte, si se me acaban las siguientes líneas (idénticos a los de la función) de forma manual en el PowerShell pronta, I lo obtener la lista de piscinas aplicación en el 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:\>

Creo que hay un concepto que soy ajeno a, en relación con PowerShell interacción remota y alcance. Puede ayudar a nadie explicar este comportamiento?

¿Fue útil?

Solución

Creo Enter / Exit-PSSession se entiende un uso más interactiva. De la ayuda Enter-PSSession:

SYNOPSIS
    Starts an interactive session with a remote computer.

En un script, utilice New-PSSession y Invoke-Command, así:

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

Actualización: para ejecutar una secuencia de comandos completa utilizar de forma remota el parámetro FilePath en Invoke-Command:

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

Esto copiará la secuencia de comandos a la server01 equipo remoto y ejecutarlo allí con los parámetros proporcionados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top