如何在C#中为Azure Function App安装SharePoint PowerShell模块

时间:2019-01-25 08:41:03

标签: c# powershell azure-functions azure-functions-runtime

只是为了管理期望,我是PowerShell和Azure Functions的新手。

由于Azure Functions 2.x不再支持PowerShell,所以我试图运行需要来自C#的SPO模块的PowerShell脚本(下面的代码),由于PowerShell脚本需要SPO模块,因此我无法运行Azure Function App。有谁知道如何在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
        }
    }

2 个答案:

答案 0 :(得分:1)

您可以在Azure函数中使用运行空间,如this example第93-98行所示。对于模块,您可以将它们作为部署到功能应用程序的有效负载的一部分(推荐),或使用Kudu安装它们。

答案 1 :(得分:1)

一旦您通过有效负载或Kudo上传模块,您的脚本应进行一些修改。可以使用保存模块直接从https://www.powershellgallery.com/下载模块。 之后,您的脚本应该进行一些修改。根据{{​​3}},-UseWebLogin是基于浏览器的。或者,您可以使用-Credentials参数。这是构建PSCredential对象的方法:

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

我们在Azure Functions 2.x中提供了PowerShell预览。。如果您想尝试一下,请告诉我。您可以通过francisco.gamino@microsoft.com与我联系。

干杯

Francisco