2015-01-28 3 views
0

Я пытаюсь запустить сценарий оболочки оболочки из C#. При запуске скрипта оболочки питания он запускается успешно. Но при попытке запустить тот же скрипт из C#. Я получаю ошибку «Термин„New-CsOnlineSession“не распознается как имя командлета»Термин «New-CsOnlineSession» не распознается как имя командлета

Вот код:

  public static void GetLyncUsers(string userName, string password) 
     { 
      using (PowerShell powerShellInstance = PowerShell.Create()) 
      { 

       var script = string.Format("$Username =\"{0}\"\n" + 
              "$Password =\"{1}\"\n" + 
              "$secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force\n" + 
              "$cred = new-Object System.Management.Automation.PSCredential ($Username , $secpasswd)\n" + 
              "$CSSession = New-CsOnlineSession -Credential $cred\n" + 
              "Import-PSSession $CSSession -AllowClobber\n" + 
              "Get-CsOnlineUser", userName, password); 

       // use "AddScript" to add the contents of a script file to the end of the execution pipeline. 
       // use "AddCommand" to add individual commands/cmdlets to the end of the execution pipeline. 

       powerShellInstance.AddScript(script); 


       // use "AddParameter" to add a single parameter to the last command/script on the pipeline. 


       // invoke execution on the pipeline (collecting output) 
       Collection<PSObject> psOutput = powerShellInstance.Invoke(); 

       // check the other output streams (for example, the error stream) 
       if (powerShellInstance.Streams.Error.Count > 0) 
       { 
        // I am getting this error 
        //The term 'New-CsOnlineSession' is not recognized as the name of a cmdlet 
       } 
     } 

Что мне не хватает? Я новичок в powershell вообще.

+0

Вы пытались импортировать модуль lync вручную в этот сеанс? – Eris

ответ

1

Решение:

using (PowerShell powerShellInstance = PowerShell.Create()) 
{  
    // Import-Module lynconlineconnector 
    powershellInstance.Commands 
     .AddCommand("Import-Module") 
     .AddArgument("lynconlineconnector"); 

// rest of your code .... 

Почему?

При запуске интерактивного сеанса в powershell v3 и выше хост-ловушки CommandNotFound и ищет каждый модуль во всех известных местах. Если он находит команду, он автоматически загружает модуль и работает нормально.

При запуске такого же сценария на C# исключение CommandNotFound не попадает в ловушку, и, следовательно, вы получаете ошибку.

Связанные Вопрос (ы):

PowerShell - How to Import-Module in a Runspace

#PSTip Cmdlet Discovery and Module auto-loading

+0

Не работает. {Указанный модуль «lynconlineconnector» не был загружен, потому что в любом каталоге модуля не было найдено допустимого файла модуля.} – Sameer

0

Я столкнулся с той же проблемой. Вы должны установить Lync/Skype для бизнеса Интернет Connector, как описано на Technet

программу установки копирует Skype для модуля Business Online Connector (и New-CsOnlineSession Командлет) на локальном компьютере.

Смежные вопросы