Неправильный путь для Add-PSSnapin при запуске сценария PowerShell из C#

Я запускаю сценарии PowerShell из инструмента С# следующим образом:

using (PowerShell pshell = PowerShell.Create())
{
    pshell.AddCommand(scriptFullPath);

    pshell.AddParameter("username", user);
    pshell.AddParameter("password", pass);

    PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();
    PSInvocationSettings settings = new PSInvocationSettings();
    settings.ErrorActionPreference = ActionPreference.Stop;

    pshell.Invoke(null, outputCollection, settings);
}

Почти все отлично работает в Скрипте, пока мне не потребуются специальные Командлеты из других Сборок. Команда Add-PSSnapin всегда завершается ошибкой:

Exception: The Windows PowerShell snap-in 'Microsoft.SharePoint.Powershell' is not installed on this computer.
Exception: Cannot bind parameter 'Path' to the target. Exception setting "Path": "Cannot find path 'D:\dev\tool\Microsoft.SharePoint.dll' because it does not exist."

при беге

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq "Microsoft.SharePoint.Powershell"}
if ($snapin -eq $null)
{
    Write-Host "Loading SharePoint Powershell Snapin"
    Add-PSSnapin "Microsoft.SharePoint.Powershell"
    Add-Type -Path "Microsoft.SharePoint.dll" 
    Add-Type -Path "Microsoft.SharePoint.Runtime.dll"
}

Все работает нормально при запуске скрипта непосредственно в окне PowerShell, поэтому я предполагаю, что это как-то связано с PATH или Scope, которые не пересылаются из инструмента С#. Игра с параметром useLocalScope команды AddCommand или другими параметрами не дала никаких результатов (хотя я не уверен, имеет ли это какое-либо отношение к путям).

Как заставить Скрипт работать и находить внешние сборки?


person Kirschi    schedule 02.04.2019    source источник


Ответы (1)


Оснастка SharePoint PowerShell доступна только в 64-разрядной версии. Ваш инструмент С# может работать как процесс x86 и, следовательно, выдаст ошибку «не установлен». Также вам, возможно, придется запустить программу «от имени администратора», так как это необходимо для работы некоторых команд.

Вторая ошибка заключается в том, вы правы, что для SharePoint по умолчанию не задана переменная PATH. Обходной путь - указать полный путь к .dll (и изменить номер версии для вашей установки), например.

Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.dll"
person HAL9256    schedule 02.04.2019