0

Exchange 2010リモートPowerShellとC#を使用してPS1スクリプトを実行しようとしています。ps1スクリプトに接続して実行できますが、スクリプトには、交換コマンドレットを使用して必要なユーザー情報を更新する場所がいくつかあります。スクリプトが使用しているコマンドレットの1つは、update-recipientです。このコマンドレットを実行しようとすると、次のようなエラーが発生するまで、スクリプトは正常に実行されます。

「update-recipient」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。

c#からPS1スクリプト内でコマンドレットを実行することに制限があるかどうか誰かが知っていますか?

ありがとう

4

3 に答える 3

1

コマンドラインからExchange2010PowerShellスクリプトを実行するには、PowerShellスクリプトの先頭でExchangeコンポーネントを読み込む必要があります。これらの2行を.ps1ファイルに追加します。最初の行で、Exchangeサーバーの名前をEXCHANGESERVERに置き換えます。

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://EXCHANGESERVER/PowerShell/ -Authentication Kerberos

Import-PSSession $Session
于 2012-06-15T16:12:32.973 に答える
0

または、MSFTのExchange2007でこのコードを試してください

       Runspace myRunspace = RunspaceFactory.CreateRunspace();
        myRunspace.Open();

        RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
        PSSnapInException snapInException = null;
        PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);
        Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
        myRunSpace.Open(rsConfig);
于 2012-02-11T02:43:04.557 に答える
0

このサンプルコードを試してください(Exchange 2010で機能することを知っています)

        PSCredential credential = new PSCredential(@"domain\user", createPassword("Pass"));
        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "exchange.ibm.com", 80, "/Powershell", "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
        connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default;
        Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo);

        try
        {
            runspace.Open();
            Pipeline pipeline = runspace.CreatePipeline();

            Command objCommand = new Command("");
            objCommand.Parameters.Add("Identity", @"dom\user");
            pipeline.Commands.Add(objCommand);

            Collection<PSObject> results = pipeline.Invoke();
        }
        catch 
        {
        }
        finally
        {
            runspace.Close();                   
        }
于 2012-02-11T02:42:03.993 に答える