2

スクリプトを続行する前に、確立して現在のセッションにインポートする必要がある 2 つの PSSession があります。どちらのステップも、連続して実行する場合、それぞれ約 10 ~ 15 秒、合計で 20 ~ 30 秒かかります。

別の実行空間で New-PSSession を実行し、その確立されたセッションを親プロセスにインポートすることは可能ですか?

たとえば、次のように変更します。

New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ("https://$($service)/PowerShell/") -Credential $Credential -Authentication Basic -AllowRedirection -ErrorAction Stop

New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $Credential -Authentication Basic -AllowRedirection -ErrorAction Stop

おそらくこのようなものに(これは機能しないことを警告します):

$credential = Get-Credential

$scriptblock = 
{
       param ([string]$Credential)

       $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $Credential -Authentication Basic -AllowRedirection -ErrorAction Stop
       return $session
}


$shell = [PowerShell]::Create().AddScript($scriptblock).AddParameter($credential)

$job = $shell.BeginInvoke()
$result = $shell.EndInvoke($job)

Import-PSSession $result

最終的な目標は、これにかかる時間を短縮することです。New-PSSession を並行して使用すると、連続して 20 ~ 30 秒ではなく、10 ~ 15 秒で完了するという考えです。これを達成する答えに満足しています。実行空間を使用する必要はありません。

編集:追加された目標

4

1 に答える 1

3

クレジットは、私たちを正しい方向に向けてくれた@ShankarShastriに送られます。New-PSSession コマンドレットは、URI または ComputerNames の配列を入力として受け取ることをサポートしています。URI の代わりにテストするサーバーがありましたが、これを見てください。

$cred = Get-Credential DOMAIN\user

$servers = 
"server1.domain.company.com",
"server2.domain.company.com",
"server3.domain.company.com",
"server4.domain.company.com",
"server5.domain.company.com",
"server6.domain.company.com",
"server7.domain.company.com"

(Measure-Command {
    foreach($s in $servers) { $temp = New-PSSession -ComputerName $s -Authentication Negotiate -Credential $cred }
}).TotalSeconds

# 2.987739

(Measure-Command {
    $s1, $s2, $s3, $s4, $s5, $s6, $s7 = New-PSSession -ComputerName $servers -Authentication Negotiate -Credential $cred
}).TotalSeconds

# 0.5793281

これは、New-PSSession を 7 回実行したのに対し、New-PSSession を 1 回実行して 7 つの ComputerNames を指定したことを示しています。違いは約 6 倍高速であり、これは接続が非同期で行われることを意味します。

したがって、あなたの場合、次のようなものを実行することで、おそらく目的を達成できます。

$sessions1, $sessions2 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ("https://$($service)/PowerShell/"),"https://outlook.office365.com/powershell-liveid/" -Credential $Credential -Authentication Basic -AllowRedirection -ErrorAction Stop
于 2016-09-15T21:29:26.900 に答える