只是为了管理期望,我是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
}
}
答案 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