Подключение к PSSession с началом работы - PullRequest
0 голосов
/ 11 сентября 2018

Добрый день,

Я пытаюсь создать функцию для входа на удаленные машины с помощью PSSEssion. Идея состоит в том, что эти сеансы будут работать в фоновом режиме, а скрипт выполняет другие действия.

Проблема в том, что когда я использую Get-Job, я вижу, что задания завершены:

Id     Name            PSJobTypeName   State         HasMoreData     Location     
--     ----            -------------   -----         -----------     --------    
2      Job2            BackgroundJob   Completed     True            localhost      
4      Job4            BackgroundJob   Completed     True            localhost 

Когда я использую Receive-Job -Id 2 -Keep, я также вижу результат:

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     1.0        tmp_jeenmyes.e5c                    {Search-AdminAuditLog, 

Проблема в том, что когда я использую Get-PSSession, он пуст. это не показывает новые сеансы. Я также не могу использовать новые команды. Я не уверен, что я делаю не так.

Спасибо, что уделили время.

function Sessions {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, 
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true)]
        $AdminAccount
    )

    begin {
        # Delete 'Broken' Sessions
        $PSSession = Get-PSSession
        foreach ($Session in $PSSession) {
            IF ($Session.State -eq 'Broken') {
                Remove-PSSession -id $Session.id
            }
        }
        # SeesionOption for a longer session
        $SeesionOptions = New-PSSessionOption -IdleTimeout $(60000 * 60) `
            -OpenTimeout $(60000 * 60) -OperationTimeout $(60000 * 60)
    }

    process {
        Start-Job -ScriptBlock {
            $CloudSession = New-PSSession -ConfigurationName Microsoft.Exchange `
                -ConnectionUri "https://pod51043psh.outlook.com/powershell-liveid?PSVersion=5.0.9814.0" `
                -Credential $args[0] -Authentication Basic -SessionOption $args[1] 
            Import-PSSession $CloudSession
        } -ArgumentList $LocalCred, $SeesionOptions 

        Start-Job -ScriptBlock {
            $OnPremisesSession = New-PSSession -ConfigurationName Microsoft.Exchange `
                -ConnectionUri http://wki-exch01.domain.com/powershell/ `
                -Credential $args[0] -Authentication Kerberos -SessionOption $args[1] 

            Import-PSSession $OnPremisesSession
        } -ArgumentList $LocalCred, $SeesionOptions
    }
    end {
    }
}

Sessions -AdminAccount $Localcred

1 Ответ

0 голосов
/ 11 сентября 2018

Какова ваша общая цель? Вы пытаетесь использовать PowerShell Implicit Remoting, чтобы вы могли использовать некоторые удаленные функции локально?

Если так, то общий синтаксис для вашего скрипта будет:

#start of script
Param(
    $AdminAccount
)
$DCSession = New-PSSession -Computername DC1 -Credential $AdminAccount
Invoke-Command -Session $DCSession -ScriptBlock {Import-Module ActiveDirectory}
Import-PSSession -Session $DCSession -Module ActiveDirectory

#continue with script commands here using the imported functions/module as if they were local
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...