gpt4 book ai didi

powershell - 如何在 Azure Function 中安装 PowerShell 模块

转载 作者:行者123 更新时间:2023-12-04 03:42:49 27 4
gpt4 key购买 nike

我需要 AWS 模块,该模块可从 PS-Gallery 获取,但是当我尝试在 Azure Function 内运行安装步骤时,它不起作用。 -verbose 参数标志不会向控制台写入任何内容。

在 Azure 函数中获取和使用其他 PowerShell 模块的正确方法是什么?

函数代码

[Console]::WriteLine("PowerShell Timer trigger function executed at:$(get-date)");
if (-not (Get-Module -Name "AWSPowerShell")) {
[Console]::WriteLine("AWSPowerShell not installed");
Install-Module -Name AWSPowerShell -Scope CurrentUser -ErrorAction Continue -Verbose
}
if (-not (Get-Module -Name "AWSPowerShell")){
[Console]::WriteLine("AWSPowerShell install step failed");
}

函数日志

2016-06-09T11:24:31.108 Function started (Id=e09be687-2e13-4754-942e-eab75c8516e5)
2016-06-09T11:24:32.788 Powershell Timer trigger function executed at:06/09/2016 11:24:32
AWSPowerShell not installed
AWSPowerShell install step failed
2016-06-09T11:24:32.788 Function completed (Success, Id=e09be687-2e13-4754-942e-eab75c8516e5)
<小时/>

更新

根据 @travis 的回答,我添加了建议的代码,包括 nuget 包管理器行。这仍然没有成功。我添加了另一个调试行,发现没有模块提供程序,即使在尝试添加 nuget 后也是如此!

修改后的代码

[Console]::WriteLine("Powershell Timer trigger function executed at:$(get-date)");

Get-PackageProvider -Name nuget -ForceBootstrap

$pkg=Get-PackageProvider -ListAvailable
if ($pkg.Count -lt 1){ [Console]::WriteLine("No providers")}

if (-not (Get-Module -listavailable -Name "AWSPowerShell")) {
[Console]::WriteLine("AWSPowerShell not installed");
Install-Module -Name AWSPowerShell -Scope CurrentUser -ErrorAction Continue -Verbose -force
}

if (-not (Get-Module -listavailable -Name "AWSPowerShell")){
[Console]::WriteLine("AWSPowerShell install step failed");
}

Import-Module AWSPowerShell

修改日志

2016-06-09T17:54:03.859 Powershell Timer trigger function executed at:06/09/2016 17:54:02
No providers
AWSPowerShell not installed
AWSPowerShell install step failed
2016-06-09T17:54:03.859 Function completed (Success, Id=80efb9fc-5e91-45f9-ab58-3b71fcd764af)

最佳答案

Azure Functions 对 PowerShell 脚本的支持目前处于实验阶段。支持以下场景:

  1. Azure Functions 将能够支持客户自带模块。这些模块将驻留在名为 modules 的文件夹中,该文件夹位于 PowerShell 脚本所在的同一目录中。在 Kudu示例函数的控制台,目录结构如下所示,

enter image description here

  • 我们不支持客户使用 Install-Module cmdlet 安装自己的模块,但是,客户可以将其模块上传到 modules 文件夹中。

  • modules 文件夹中的所有模块都会自动加载,因此客户无需显式使用 Import-Module cmdlet。

  • 我们将支持脚本二进制 list 模块。这些模块将驻留在 modules 文件夹中的平面结构中。布局示例如下:

    enter image description here

  • 根据您想要实现的目标,以下是一些建议步骤,以确保加载 AWSPowerShell 模块。

    1. 在您的开发计算机上本地安装 AWSPowerShell。您需要上传 \AWSPowerShell\3.3.5.0

    2. 下的所有内容
    3. 使用 Kudu 界面,将已安装的 AWSPowerShell 依赖项上传到位于函数目录中的 modules 文件夹。为此,请打开 Function App 的门户 UI,然后单击Function App Settings 按钮。

    4. 接下来,点击转到 Kudu 按钮启动 Kudu 控制台。您应该看到类似于以下内容的快照,

      enter image description here

    5. 在 cmd 控制台提示符中,导航到函数的文件夹,创建 modules 目录并将 \AWSPowerShell\3.3.5.0 中的所有内容上传到modules 目录。

    您最终应该得到一个模块文件夹,其中包含类似于下面快照的文件列表:

    enter image description here

  • 运行您的函数。例如,给定我的函数的以下脚本,

    if (-not (Get-Module -Name "AWSPowerShell"))
    {
    写入输出“AWSPowerShell 未安装”;
    }
    别的
    {
    写入输出“AWSPowerShell已安装”;
    }

  • 执行时,日志输出如下,

    2016-10-11T18:26:01.486 Function started (Id=582b69aa-6236-436d-81c5-c08ada8ae674)
    2016-10-11T18:26:03.267 Loaded modules:
    /AWSPowerShell/modules/AWSPowerShell.psd1
    /AWSPowerShell/modules/AWSPowerShell.dll
    /AWSPowerShell/modules/AWSSDK.APIGateway.dll
    /AWSPowerShell/modules/AWSSDK.ApplicationAutoScaling.dll
    /AWSPowerShell/modules/AWSSDK.ApplicationDiscoveryService.dll
    /AWSPowerShell/modules/AWSSDK.AutoScaling.dll
    /AWSPowerShell/modules/AWSSDK.AWSMarketplaceCommerceAnalytics.dll
    /AWSPowerShell/modules/AWSSDK.AWSMarketplaceMetering.dll
    /AWSPowerShell/modules/AWSSDK.AWSSupport.dll
    /AWSPowerShell/modules/AWSSDK.CertificateManager.dll
    /AWSPowerShell/modules/AWSSDK.CloudFormation.dll
    /AWSPowerShell/modules/AWSSDK.CloudFront.dll
    /AWSPowerShell/modules/AWSSDK.CloudHSM.dll
    /AWSPowerShell/modules/AWSSDK.CloudSearch.dll
    /AWSPowerShell/modules/AWSSDK.CloudSearchDomain.dll
    /AWSPowerShell/modules/AWSSDK.CloudTrail.dll
    /AWSPowerShell/modules/AWSSDK.CloudWatch.dll
    /AWSPowerShell/modules/AWSSDK.CloudWatchEvents.dll
    /AWSPowerShell/modules/AWSSDK.CloudWatchLogs.dll
    /AWSPowerShell/modules/AWSSDK.CodeCommit.dll
    /AWSPowerShell/modules/AWSSDK.CodeDeploy.dll
    /AWSPowerShell/modules/AWSSDK.CodePipeline.dll
    /AWSPowerShell/modules/AWSSDK.CognitoIdentity.dll
    /AWSPowerShell/modules/AWSSDK.CognitoIdentityProvider.dll
    /AWSPowerShell/modules/AWSSDK.ConfigService.dll
    /AWSPowerShell/modules/AWSSDK.Core.dll
    /AWSPowerShell/modules/AWSSDK.DatabaseMigrationService.dll
    /AWSPowerShell/modules/AWSSDK.DataPipeline.dll
    /AWSPowerShell/modules/AWSSDK.DeviceFarm.dll
    /AWSPowerShell/modules/AWSSDK.DirectConnect.dll
    /AWSPowerShell/modules/AWSSDK.DirectoryService.dll
    /AWSPowerShell/modules/AWSSDK.DynamoDBv2.dll
    /AWSPowerShell/modules/AWSSDK.EC2.dll
    /AWSPowerShell/modules/AWSSDK.ECR.dll
    /AWSPowerShell/modules/AWSSDK.ECS.dll
    /AWSPowerShell/modules/AWSSDK.ElastiCache.dll
    /AWSPowerShell/modules/AWSSDK.ElasticBeanstalk.dll
    /AWSPowerShell/modules/AWSSDK.ElasticFileSystem.dll
    /AWSPowerShell/modules/AWSSDK.ElasticLoadBalancing.dll
    /AWSPowerShell/modules/AWSSDK.ElasticLoadBalancingV2.dll
    /AWSPowerShell/modules/AWSSDK.ElasticMapReduce.dll
    /AWSPowerShell/modules/AWSSDK.Elasticsearch.dll
    /AWSPowerShell/modules/AWSSDK.ElasticTranscoder.dll
    /AWSPowerShell/modules/AWSSDK.GameLift.dll
    /AWSPowerShell/modules/AWSSDK.IdentityManagement.dll
    /AWSPowerShell/modules/AWSSDK.ImportExport.dll
    /AWSPowerShell/modules/AWSSDK.Inspector.dll
    /AWSPowerShell/modules/AWSSDK.IoT.dll
    /AWSPowerShell/modules/AWSSDK.IotData.dll
    /AWSPowerShell/modules/AWSSDK.KeyManagementService.dll
    /AWSPowerShell/modules/AWSSDK.Kinesis.dll
    /AWSPowerShell/modules/AWSSDK.KinesisAnalytics.dll
    /AWSPowerShell/modules/AWSSDK.KinesisFirehose.dll
    /AWSPowerShell/modules/AWSSDK.Lambda.dll
    /AWSPowerShell/modules/AWSSDK.MachineLearning.dll
    /AWSPowerShell/modules/AWSSDK.MobileAnalytics.dll
    /AWSPowerShell/modules/AWSSDK.OpsWorks.dll
    /AWSPowerShell/modules/AWSSDK.RDS.dll
    /AWSPowerShell/modules/AWSSDK.Redshift.dll
    /AWSPowerShell/modules/AWSSDK.Route53.dll
    /AWSPowerShell/modules/AWSSDK.Route53Domains.dll
    /AWSPowerShell/modules/AWSSDK.S3.dll
    /AWSPowerShell/modules/AWSSDK.SecurityToken.dll
    /AWSPowerShell/modules/AWSSDK.ServiceCatalog.dll
    /AWSPowerShell/modules/AWSSDK.SimpleEmail.dll
    /AWSPowerShell/modules/AWSSDK.SimpleNotificationService.dll
    /AWSPowerShell/modules/AWSSDK.SimpleSystemsManagement.dll
    /AWSPowerShell/modules/AWSSDK.SimpleWorkflow.dll
    /AWSPowerShell/modules/AWSSDK.Snowball.dll
    /AWSPowerShell/modules/AWSSDK.SQS.dll
    /AWSPowerShell/modules/AWSSDK.StorageGateway.dll
    /AWSPowerShell/modules/AWSSDK.WAF.dll
    /AWSPowerShell/modules/AWSSDK.WorkSpaces.dll
    /AWSPowerShell/modules/log4net.dll
    /AWSPowerShell/modules/AWSPowerShellCompleters.psm1
    2016-10-11T18:27:21.265 AWSPowerShell installed
    2016-10-11T18:27:21.464 Function completed (Success, Id=582b69aa-6236-436d-81c5-c08ada8ae674)

    注意:由于所有模块都是在运行时加载的,因此该函数需要一段时间才能完成。

    请务必记住,与大多数 IaaS 设置不同,Azure Function 在 Multi-Tenancy 环境中执行。因此,仍然存在以下已知警告:

    1. 我们的基础设施可防范任何执行我们认为存在安全风险的低级 API 的函数(例如交互模式、主机凭据访问、注册表编辑等)。如果您使用的 PowerShell 脚本或模块调用任何这些被阻止的 API,您将无法在 Functions 中执行这些工作负载。但我们的目标是支持尽可能多的场景,所以我们会根据客户的需求量来优先解锁场景。

    2. 我们目前在基础设施中安装了 PowerShell 4.0 版和 Azure PowerShell 1.4。我们将很快升级这些版本。随着我们在 Azure Functions 中添加更多对 PowerShell 的支持,模块套件可能会随着时间的推移而升级或添加。这些预安装的模块极有可能与您现有的模块发生冲突。

    关于powershell - 如何在 Azure Function 中安装 PowerShell 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724769/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com