PowerShell Sessions à distance et la question de la portée: Les commandes semblent fonctionner localement

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

  •  25-09-2019
  •  | 
  •  

Question

Voici un exemple de script qui tente de créer une session à distance sur un serveur, puis utilisez WMI pour obtenir une liste des pools d'applications IIS du serveur, et la liste de leurs noms:

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

Cette fonction est contenu dans un fichier appelé « Test-Remoting.ps1. » J'ouvre PowerShell, CD dans le répertoire contenant ce fichier, point source du fichier et appeler la fonction:

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

Mais le résultat de ce script est une liste des pools d'applications sur mon locale machine et pas TestServer.

Par ailleurs, si je lance les lignes suivantes (identiques à ceux de la fonction) manuellement à l'invite PowerShell, I faire obtenir la liste des pools d'applications sur le serveur distant:

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:\>

Je pense qu'il ya un concept que je suis inconscient, en ce qui concerne PowerShell Remoting et la portée. Quelqu'un peut-il aider à expliquer ce comportement?

Était-ce utile?

La solution

Je crois Entrée / Sortie-PSSession est destiné une utilisation plus interactive. De l'aide Enter-PSSession:

SYNOPSIS
    Starts an interactive session with a remote computer.

Dans un script, utilisez New-PSSession et Invoke-Command comme ceci:

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

Mise à jour: Pour exécuter un script complet à distance utilise le paramètre FilePath sur Invoke-Command:

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

Ceci copiera le script à l'server01 de l'ordinateur distant et l'exécuter là avec les paramètres fournis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top