Как установить модуль SharePoint PowerShell внутри C # для приложения-функции Azure

Чтобы справиться с ожиданиями, я новичок в PowerShell и функциях Azure.

Поскольку Azure Functions 2.x больше не поддерживает PowerShell, я пытаюсь запустить свои сценарии PowerShell, для которых требуются модули SPO из C # (код ниже), у меня возникают проблемы с запуском приложения функций Azure, поскольку сценариям PowerShell нужны модули SPO. Кто-нибудь, кто знает, как установить необходимые модули внутри экземпляра C # PowerShell, например Runspace или что-то в этом роде? Я даже здесь на правильном пути? Любые комментарии приветствуются. Спасибо вам всем.

Образец кода:

 [FunctionName("TestFunction")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                var script = @"
Install-Module Microsoft.Online.SharePoint.PowerShell
Install-Module SharePointPnPPowerShellOnline

$url = '<SharePoint Url>'

$ListName = '<List Name>'

Connect-PnPOnline -Url $url -UseWebLogin 

$Fields = Get-PnPField -List $ListName  
$Items= Get-PnPListItem -List $ListName -PageSize 5000

$RowCtr = 1;

foreach($item in $items.FieldValues)
{
    #do something
    $RowCtr++;
}
";

                PowerShellInstance.AddScript(script);

                var results = PowerShellInstance.Invoke();
                //some other codes
        }
    }

person Izzy    schedule 25.01.2019    source источник


Ответы (2)


Вы можете использовать пространство выполнения в функции Azure, как показано в этот пример, строки 93-98. Что касается модулей, вы можете включить их как часть полезной нагрузки, которую вы развертываете в своем приложении-функции (рекомендуется), или установить их с помощью Kudu.

person Katy Shimizu    schedule 29.01.2019

После того, как вы загрузите свои модули через payload или Kudo, ваш скрипт должен работать с некоторыми модификациями. Модули можно напрямую загрузить с https://www.powershellgallery.com/ с помощью Save-Module. После этого ваш скрипт должен работать с небольшими изменениями. Согласно https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/connect-pnponline?view=sharepoint-ps, -UseWebLogin основан на браузере. В качестве альтернативы вы можете использовать параметр -Credentials. Вот как вы создаете объект PSCredential:

$secPassword = ConvertTo-SecureString "StringPassword" -AsPlainText -Force
$credential = [System.Management.Automation.PSCredential]::new("userName", $secPasswd)

Обновление от 23.01.20:

По состоянию на ноябрь 2019 года PowerShell в функциях имеет редакцию GA и доступен в функциях V2 и V3. Для получения дополнительной информации посетите https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-powershell

Чтобы ваше приложение-функция PowerShell устанавливало зависимости от https://www.powershellgallery.com/, вы можете использовать нашу функцию управляемых зависимостей. Для получения дополнительной информации посетите https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-powershell#dependency-management.

Ваше здоровье,

Франциско

person Francisco Gamino    schedule 29.01.2019