0

$PSDefaultParameterValues を使用して生活を簡素化しようとしています。暗黙的なリモート処理によって読み込まれたコマンドレットを呼び出すと、$PSDefaultParameterValues で設定したものが無視されるという問題が発生しています。

私が現在実行しているものの簡単な例:

$domainController = 'dc1.ptloma.edu' 
Import-Module ActiveDirectory

foreach($command in (Get-Command -Module ActiveDirectory -ParameterName Server))
{
    $PSDefaultParameterValues["$($command.Name):Server"] = $domainController
}        

$exchangeSessionParameters = @{
    Name = "ExchangeInterop"
    ConfigurationName = "Microsoft.Exchange"
    Authentication = "Kerberos"
    Credential = $ExchangeCredential
    ConnectionUri = "http://server.domain.com/PowerShell/"
}

$exchangePsSession = New-PSSession @exchangeSessionParameters
$remoteModule = Import-Session -Session $exchangePsSession

foreach($command in (Get-Command -Module $remoteModule -ParameterName DomainController))
{
    $PSDefaultParameterValues["$($command.Name):DomainController"] = $domainController
}

try
{
    New-AdGroup -Path "OU=Automated,OU=Groups,DC=domain,DC=com" -Name "GroupA"
    Enable-DistributionGroup -Identity "CN=GroupA,OU=Automated,OU=Groups,DC=domain,DC=com" -Alias "GroupA" -PrimarySmtpAddress "GroupA@domain.com"
}
catch
{
    # Breakpoint here
    Write-Host $_.Exception.SerializedRemoteInvocationInfo
    throw
}

次のような例外が発生します。

The operation couldn't be performed because object 'domain.com/Groups/Automated/GroupA' couldn't be found on 'dc2.domain.com'.

DomainController プロパティでデフォルトに設定した dc1 ではなく、dc2 について話していることに注意してください。

エラー レコードを詳しく調べると、例外の SerializedRemoteInvocationInfo プロパティには、バインドされたパラメーターとして、、、AliasおよびPrimarySmtpAddressのみが表示されていることがわかります。Identityに何かが渡されているようには見えませんDomainController

DomainController パラメーターをリファクタリングして明示的に定義するか、スクリプト スコープのハッシュテーブルとスプラッティングを使用するだけでよいことはわかっていますが、それにはかなりの変更が必要であり、なぜこのような動作になるのか非常に興味があります。

4

1 に答える 1

0

これらのExchangeセッションで暗黙的なリモート処理を使用すると、Exchangeコマンドレット(実際にはプロキシ関数)が実行のためにリモートセッションに渡され、結果がローカルセッションに返されます。そのハッシュテーブルはリモートセッションに存在しません。

于 2013-01-04T18:19:30.743 に答える