Я запускаю сценарии 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 или другими параметрами не дала никаких результатов (хотя я не уверен, имеет ли это какое-либо отношение к путям).
Как заставить Скрипт работать и находить внешние сборки?