Frage

Hier ist ein Beispielskript, das versucht, eine Remote-Sitzung auf einem Server zu erstellen, dann WMI verwenden, um eine Liste der Server-IIS-Applikations-Pool zu bekommen, und die Liste ihrer Namen:

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

Diese Funktion wird in einer Datei mit dem Namen enthält "Test-Remoting.ps1." Ich öffne Powershell-CD in das Verzeichnis, das diese Datei enthält, Dot-Quelle die Datei in, und rufen Sie die Funktion:

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

Aber das Ergebnis dieses Skripts ist eine Liste der Anwendungspool auf meiner local Maschine, und nicht Testserver.

Alternativ kann, wenn ich die folgenden Zeilen (identisch mit denen in der Funktion) manuell ausführen, an der Powershell-Eingabeaufforderung I tun erhalten Sie die Liste der App-Pool auf dem Remote-Server:

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

Ich denke, es ist ein Konzept, das ich blind bin, in Bezug auf Powershell-Remoting und Umfang. Dieses Verhalten kann jemand helfen erklären?

War es hilfreich?

Lösung

Ich glaube, Enter / Exit-PSSession ist mehr interaktive Nutzung gedacht. Von der Enter-PSSession Hilfe:

SYNOPSIS
    Starts an interactive session with a remote computer.

In einem Skript verwenden New-PSSession und Invoke-Command wie folgt:

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

Update: ein komplettes Skript auszuführen remote die FilePath-Parameter auf Invoke-Command verwenden:

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

Dies wird das Skript auf dem entfernten Computer server01 kopieren und führen Sie es dort mit den angegebenen Parametern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top