0

PowerShell で実行すると正常に実行される PowerShell スクリプトがありますが、C# から実行しようとするとエラーがスローされます。PowerShell スクリプトは、lync online (Skype for Business) に接続し、lync online ユーザーを一覧表示しようとしています。

c# から powershell スクリプトを呼び出すコードを次に示します。

        public static void ImportLyncUsers()
    {

        RunspaceConfiguration config = RunspaceConfiguration.Create();
        using (Runspace myRs = RunspaceFactory.CreateRunspace(config))
        {
            myRs.Open();

            RunspaceInvoke scriptInvoker = new RunspaceInvoke(myRs);
            scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted");

            using (PowerShell powerShellInstance = PowerShell.Create())
            {
                powerShellInstance.Runspace = myRs;

                // Import module.
                powerShellInstance.Commands.AddCommand("Import-Module")
                    .AddArgument(
                        @"C:\Program Files\Common Files\Microsoft Lync Server 2013\Modules\LyncOnlineConnector\LyncOnlineConnector.psd1");
                powerShellInstance.Invoke();
                powerShellInstance.Commands.Clear();
                var filePath = @"F:\PresensoftNewTrunk\Trunk\Lync Archiver\Exchange\Scripts\ImportUsers.ps1";
                powerShellInstance.Commands.AddScript(System.IO.File.ReadAllText(filePath));


                Collection<PSObject> psOutput = powerShellInstance.Invoke(); //Getting exception here.

                // check the other output streams (for example, the error stream)
                if (powerShellInstance.Streams.Error.Count > 0)
                {
                    // error records were written to the error stream.
                    // do something with the items found.
                }
            }
        }

    }

これは、C# から ps スクリプトを実行しようとしたときに発生するエラーです。

Message        : Object reference not set to an instance of an object.
Data           : {}
InnerException : 
TargetSite     : Void .ctor(IDCRLMode)
StackTrace     :    at Microsoft.Rtc.Admin.Authentication.ManagedIdcrl..ctor(IDC
                 RLMode mode)
                    at Microsoft.Rtc.Admin.Authentication.ManagedIdcrl..ctor()
                    at Microsoft.Rtc.Management.LyncOnlineConnector.GetWebTicket
                 Cmdlet.CreateAndInitializeManagedIdcrl()
                    at Microsoft.Rtc.Management.LyncOnlineConnector.GetWebTicket
                 Cmdlet.get_ManagedIdcrl()
                    at Microsoft.Rtc.Management.LyncOnlineConnector.GetWebTicket
                 Cmdlet.GetLiveIdToken(String remoteFqdn, Int32 port, 
                 PSCredential creds)
                    at Microsoft.Rtc.Management.LyncOnlineConnector.GetWebTicket
                 Cmdlet.ConnectToWebTicketService(String fqdn, Int32 port, 
                 PSCredential creds)
                    at Microsoft.Rtc.Management.LyncOnlineConnector.GetWebTicket
                 Cmdlet.BeginProcessing()
                    at System.Management.Automation.Cmdlet.DoBeginProcessing()
                    at 
                 System.Management.Automation.CommandProcessorBase.DoBegin()
HelpLink       : 
Source         : Microsoft.Rtc.Admin.AuthenticationHelper
HResult        : -2147467261

そして、これがpsスクリプトの一部です

 $secpasswd = New-Object -TypeName System.Security.SecureString
    $password = [LyncFoundation.Helpers.StringHelper]::Decrypt($exchangeServer.Password);
    $password.ToCharArray() | ForEach-Object { $secpasswd.AppendChar($_) }
    $cred = New-Object System.Management.Automation.PSCredential ($exchangeServer.UserName,$secpasswd)

    #Get Lync Users
    Import-Module LyncOnlineConnector
    try{
    $CSSession = New-CsOnlineSession -Credential $cred
    }
    catch [System.Net.WebException]{

        if ($_.Exception.Message.Contains("Unable to query AutoDiscover")){
            $CSSession = New-CsOnlineSession -Credential $cred -OverridePowershellUri https://admin0a.online.lync.com/OcsPowershellLiveId
        }
        else{
          throw $_.Exception
        }
    }

PowerShell から直接実行するとスクリプトがスムーズに実行されるのに、c# から呼び出そうとするとエラーが発生する理由について疑問に思っています。このエラーを通過するには、どのような環境をセットアップする必要がありますか?

4

1 に答える 1