Неправильный путь для Add-PSSnapin при запуске скрипта PowerShell из C # - PullRequest
0 голосов
/ 02 апреля 2019

Я использую сценарии PowerShell из инструмента C #, например:

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"
}

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

Как я могу заставить скрипт работать и находить внешние сборки?

1 Ответ

1 голос
/ 02 апреля 2019

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

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

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