11
votes

Comment installer un module PowerShell dans une fonction Azure

J'ai besoin du module AWS, disponible auprès de la galerie PS, mais lorsque j'essaie d'exécuter l'étape d'installation à l'intérieur d'un fonction d'azur , cela ne fonctionne pas. Le drapeau de l'argument -verbose n'écrit rien à la console.

Quelle est la bonne façon d'obtenir et d'utiliser des modules PowerShell supplémentaires dans une fonction Azure? p>

Code de fonction H2>
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)


0 commentaires

4 Réponses :


1
votes

Vous devez vous assurer de rechercher tous les modules, pas seulement des modules chargés en ajoutant -listAvailable code> au module get-module code> appel.

Vous pourriez avoir besoin Pour bootstrap Nuget pour le module d'installation pour travailler dans des environnements non interactifs. La commande est la suivante: get-packageProvider -name nuget -forcebootstrap code> p>

Si le référentiel que vous installez n'est pas fiable, vous devrez peut-être forcer le module d'installation Commande. P>

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

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");
}


3 commentaires

J'utilisais initialement l'hôte de l'hôte de l'écriture, mais l'écriture est ce que Microsoft a écrit alors je suis allé avec ce qu'ils ont fait, en supposant la meilleure pratique / la route correcte pour la solution. Je suppose que l'adage de supposer entrer en jeu ici! ;)


Je ne sais pas où cela est utilisé. Console.writehost peut être utilisé pour une raison spécifique là-bas, mais si c'est le cas. J'aimerais mieux comprendre. Mes informations Twitter sont dans mon profil. Nous devrions rester sur le sujet ici.


On dirait que je ne pourra peut-être pas ajouter des fournisseurs de paquets dans le contexte de PowerShell pour les fonctions Azure: - /



0
votes

Je soupçonne que la raison est que vous ne spécifiez pas d'emplacement pour que les modules soient chargés. Le courant $ env: psmodulepath est répertorié comme

windowspowershell \ modules;
D: \ Fichiers de programme (X86) \ Modules WindowsPowershell \; D: \ Windows \ System32 \ windowspowershell \ v1.0 \ modules \;
D: \ Program Files \ Microsoft Security Client \ MPProvider \;
D: \ Program Files \ Microsoft Message Analyzer \ PowerShell \;
D: \ Fichiers de programme \ WindowsPowershell \ modules \;
D: \ Fichiers du programme (x86) \ MicrosoftsDks \ Azure \ PowerShell \ ResourceManager \ AzureResourcemanager \;
D: \ Fichiers du programme (X86) \ Microsoft SDKS \ Azure \ PowerShell \ Servicemanagement \;
D: \ Fichiers du programme (X86) \ Microsoft SDKS \ AZURE \ POWERSHELL \ STOCKAGE \

Je ne peux pas comprendre tout à fait où il fait référence au premier de, donc je ne pouvais donc pas les mettre là-bas. Donc, je mets ceci ensemble à la place xxx

Ceci charge le module (situé à D: \ home \ modules) et fonctionne comme prévu

la raison que < Code> Get-PackageProvider -Name Nuget -ForceCootstrap ne fonctionne pas, est que le module packagemanagement n'est pas installé. Cependant Nuget est déjà installé. Vous auriez besoin d'interagir avec Kudu directement pour installer des packages de cette façon.

Je suis heureux de voir que je ne suis pas le seul à être conduit légèrement de noix par des fonctions;)


0 commentaires

12
votes

Azure support des fonctions de script PowerShell est actuellement au stade expérimental. Les scénarios suivants sont pris en charge:

  1. Fonctions Azure sera en mesure de soutenir les clients apportant leurs propres modules. Ces modules résideront dans un dossier nommé modules code> qui se trouve dans le même répertoire où réside le scripts PowerShell. Dans le Kudu console pour un exemple de fonction, la structure de répertoire regarderait comme suit, li> Ol>

    p>

    1. Nous ne soutiendrons pas les clients qui installent leurs propres modules en utilisant le Install-module code> applet de commande, cependant, les clients peuvent télécharger leurs modules dans le modules code> dossier. P> li>

    2. Tous les modules du modules code> dossier sera chargé automatiquement, afin que les clients ne devront pas utiliser explicitement le Import-module code> cmdlet. P> li>

    3. Nous appuierons Script em>, binaire em> et manifeste em> modules. Ces modules seront résider dans une structure plane à l'intérieur des modules dossier code>. Une mise en page d'exemple est le suivant: p>

       entrer image description ici p> li> Ol>

      Dans le cadre de ce que vous essayez d'atteindre, voici quelques étapes suggérées pour faire en sorte que le AWSPowerShell code> module est chargé. P>

      1. Installer AWSPowerShell code> local sur votre machine de développement. Vous aurez besoin de télécharger tout le contenu sous \ AWSPowerShell \ 3.3.5.0 code> p> li>

      2. Utilisation de l'interface Kudu, télécharger les dépendances installées de AWSPowerShell code> à un modules code> dossier résidant dans le répertoire de votre fonction. Pour ce faire, ouvrez le portail de l'interface utilisateur pour votre fonction App et cliquez sur le Fonction Paramètres de l'application Button strong>. P> li>

      3. Ensuite, cliquez sur le bouton Aller à Kudu bouton strong> pour lancer la console Kudu. Vous devriez voir un instantané semblable au suivant, p>

         entrer image description ici p> li>

      4. Dans la console cmd invite, accédez à votre dossier de fonction, créez un modules de répertoire et télécharger code>, le contenu de \ AWSPowerShell \ 3.3.5.0 code> à la modules code>. p> li> Ol>

        Vous devriez finir avec un dossier modules qui a une liste de fichiers similaire à l'instantané ci-dessous: p>

        entrer image description ici p>

      5. Exécuter votre fonction. Par exemple, étant donné le script suivant pour ma fonction, p>

        if (-non (Get-Module -Name "AWSPowerShell")) { Écriture de sortie « AWSPowerShell pas installé »; } autre { Écriture de sortie « AWSPowerShell installé »; } Code> p> li> Ol>

        lorsqu'il est exécuté, la sortie du journal est suit comme, p>

        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)
        


4 commentaires

Ceci est utile pour obtenir la configuration initiale du code. Cependant, cela rend le développement local une douleur. Lors de l'exécution ./Run.ps1 localement, il n'a pas le module DLL ou mon script chargé localement. Donc, je dois trouver un moyen défensif de gérer le script dans le développement local ... Je ne comprends pas encore cela.


Le dossier "Modules" n'est qu'une fonctionnalité de commodité. Vous pouvez le renommer sur "Modules" ou tout autre nom et mettre vos dlls là-bas. Utilisez ensuite la cmdlet Import-Module dans votre script Run.PS1.


De plus, vous pouvez également déplacer votre répertoire de modules personnalisés dans l'arborescence de sorte que le même chemin puisse être partagé entre les fonctions dans la même application de fonction.


Je vois maintenant que je peux en effet vérifier même un module de script à l'aide de si (-NOT (Nom d'écran "Nom"))) . Je travaille toujours en essayant de charger ensuite éventuellement charger la DLL via l'ajout de type dans le module.



1
votes

Qu'en est-il de la mise à jour des modules Azurerm PowerShell, il existe de nombreux modules pour accéder à la dernière version 4.1.0 que si nous téléchargons une question pour mettre dans un répertoire plat.

C: \ Fichiers du programme (x86) \ Microsoft SDKS \ Azure \ PowerShell \ ResourceManager \ AzureSourcemanager

contient 46 dossiers.


0 commentaires