Удаленные сеансы PowerShell и вопрос о возможностях: команды кажутся локально

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

  •  25-09-2019
  •  | 
  •  

Вопрос

Вот пример сценария, который пытается создать удаленный сеанс на сервере, затем используйте WMI, чтобы получить список пулей приложений IIS сервера и перечислите их имена:

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

Эта функция содержится в файле под названием «Test-Remoting.ps1». Я открываю PowerShell, CD в каталог, который содержит этот файл, точечный источник файла в и вызовет функцию:

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

Но результатом этого сценария является список пулов приложений на моем местный машина и нет Testserver.

В качестве альтернативы, если я запускаю следующие строки (идентичны тему в функции) вручную в подсказке PowerShell, я делать Получите список пулов приложений на удаленном сервере:

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

Я думаю, что есть концепция, которую я не обращающуюся, касающуюся удаления PowerShell и объема. Кто-нибудь может помочь объяснить это поведение?

Это было полезно?

Решение

Я считаю, что ввод / выездное PSSession подразумевает более интерактивное использование. С помощью Enter-Pssession Help:

SYNOPSIS
    Starts an interactive session with a remote computer.

В скрипте используйте New-PSSession и invoke-команду, как так:

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

Обновлять: Чтобы выполнить полный скрипт, удаленно используйте параметр FilePath на Invoke-Command:

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

Это будет скопировать скрипт на удаленный компьютерный сервер01 и выполнить его там с прилагаемыми параметрами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top