Azure Logic Apps: how to run Powershell script or Azure CLI?












0















I'm building my Azure Logic Apps worklow which is supposed to check some conditions and run following Powershell:



Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous


The question is: what's the easiest way to invoke such script in Azure Logic Apps? It seems like there's no built in block/connector for Powershell so I'd like to know what are the possibilites. Or perhaps it might be easier to run az CLI command with similar operation










share|improve this question



























    0















    I'm building my Azure Logic Apps worklow which is supposed to check some conditions and run following Powershell:



    Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
    Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous


    The question is: what's the easiest way to invoke such script in Azure Logic Apps? It seems like there's no built in block/connector for Powershell so I'd like to know what are the possibilites. Or perhaps it might be easier to run az CLI command with similar operation










    share|improve this question

























      0












      0








      0








      I'm building my Azure Logic Apps worklow which is supposed to check some conditions and run following Powershell:



      Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
      Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous


      The question is: what's the easiest way to invoke such script in Azure Logic Apps? It seems like there's no built in block/connector for Powershell so I'd like to know what are the possibilites. Or perhaps it might be easier to run az CLI command with similar operation










      share|improve this question














      I'm building my Azure Logic Apps worklow which is supposed to check some conditions and run following Powershell:



      Stop-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob
      Start-AzureWebsiteJob -Name MyWebsite -JobName MyWebJob -JobType Continuous


      The question is: what's the easiest way to invoke such script in Azure Logic Apps? It seems like there's no built in block/connector for Powershell so I'd like to know what are the possibilites. Or perhaps it might be easier to run az CLI command with similar operation







      azure powershell azure-logic-apps azure-cli






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 21 '18 at 14:51









      micklmickl

      15.2k51639




      15.2k51639
























          2 Answers
          2






          active

          oldest

          votes


















          1














          Currently, azure logic seems not support to run powershell and cli script, here is a voice in azure feedback, you could vote it.



          Workaround:



          If you want to start and stop the webjob, you can call the Kudu WebJobs API in the logic app.



          You can follow the steps below.



          1.Run the powershell command locally to generate the Authorization token of your web app.



          $creds = Invoke-AzureRmResourceAction -ResourceGroupName joywebapp -ResourceType Microsoft.Web/sites/config -ResourceName joywebapp2/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
          $username = $creds.Properties.PublishingUserName
          $password = $creds.Properties.PublishingPassword
          $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))


          The $base64AuthInfo is what we need, it should be like JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j.



          The token will never be changed except you reset the publish profile, so you just need to do this step once.



          2.In the logic app, specific the Method, URI, Headers(The header should be like
          Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j, note use space to separate the Basic and token), for example , I start a triggered webjob in my web app.



          enter image description here



          Triggered result:



          enter image description here



          So you just need to follow the steps above, for your issue, refer to the APIS:




          1. Start a continuous job

          2. Stop a continuous job






          share|improve this answer


























          • In the meantime I've used Azure Automation and Runbooks however your answer is a great alternative and definitely needs to be accepted, thanks a lot !

            – mickl
            Nov 22 '18 at 6:10











          • @mickl Glad to know it is helpful.;-)

            – Joy Wang
            Nov 22 '18 at 6:11



















          0














          Finally I ended up with a solution which takes advantage of Azure Automation. From Azure Portal we can create new Resource typing in Automation:



          enter image description here



          Once the resource is created we can add new Runbook under runbooks tab:



          enter image description here



          Runbook can run Powershell Workflow and get authorized using AzureRunAsConnection option (details here). My sample Powershell which is supposed to restart WebJob an specific App Service looks like below:



          Workflow RestartMyWebJob
          {
          $Conn = Get-AutomationConnection -Name AzureRunAsConnection
          Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

          $AzureContext = Select-AzureRmSubscription -SubscriptionId $Conn.SubscriptionID

          $Apiversion = "2015-08-01"
          $ResourceGroupName = 'My-Resource-Group-Name'
          $ResourceName = 'My-Resource-Group-Name/My-AppService--WebJob-Name'


          Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action stop -ApiVersion $Apiversion -Force
          Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action start -ApiVersion $Apiversion -Force
          }


          Having this Workflow setup we can run it from Azure Logic Apps by adding new block to our logic.



          enter image description here






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53414671%2fazure-logic-apps-how-to-run-powershell-script-or-azure-cli%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            Currently, azure logic seems not support to run powershell and cli script, here is a voice in azure feedback, you could vote it.



            Workaround:



            If you want to start and stop the webjob, you can call the Kudu WebJobs API in the logic app.



            You can follow the steps below.



            1.Run the powershell command locally to generate the Authorization token of your web app.



            $creds = Invoke-AzureRmResourceAction -ResourceGroupName joywebapp -ResourceType Microsoft.Web/sites/config -ResourceName joywebapp2/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
            $username = $creds.Properties.PublishingUserName
            $password = $creds.Properties.PublishingPassword
            $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))


            The $base64AuthInfo is what we need, it should be like JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j.



            The token will never be changed except you reset the publish profile, so you just need to do this step once.



            2.In the logic app, specific the Method, URI, Headers(The header should be like
            Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j, note use space to separate the Basic and token), for example , I start a triggered webjob in my web app.



            enter image description here



            Triggered result:



            enter image description here



            So you just need to follow the steps above, for your issue, refer to the APIS:




            1. Start a continuous job

            2. Stop a continuous job






            share|improve this answer


























            • In the meantime I've used Azure Automation and Runbooks however your answer is a great alternative and definitely needs to be accepted, thanks a lot !

              – mickl
              Nov 22 '18 at 6:10











            • @mickl Glad to know it is helpful.;-)

              – Joy Wang
              Nov 22 '18 at 6:11
















            1














            Currently, azure logic seems not support to run powershell and cli script, here is a voice in azure feedback, you could vote it.



            Workaround:



            If you want to start and stop the webjob, you can call the Kudu WebJobs API in the logic app.



            You can follow the steps below.



            1.Run the powershell command locally to generate the Authorization token of your web app.



            $creds = Invoke-AzureRmResourceAction -ResourceGroupName joywebapp -ResourceType Microsoft.Web/sites/config -ResourceName joywebapp2/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
            $username = $creds.Properties.PublishingUserName
            $password = $creds.Properties.PublishingPassword
            $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))


            The $base64AuthInfo is what we need, it should be like JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j.



            The token will never be changed except you reset the publish profile, so you just need to do this step once.



            2.In the logic app, specific the Method, URI, Headers(The header should be like
            Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j, note use space to separate the Basic and token), for example , I start a triggered webjob in my web app.



            enter image description here



            Triggered result:



            enter image description here



            So you just need to follow the steps above, for your issue, refer to the APIS:




            1. Start a continuous job

            2. Stop a continuous job






            share|improve this answer


























            • In the meantime I've used Azure Automation and Runbooks however your answer is a great alternative and definitely needs to be accepted, thanks a lot !

              – mickl
              Nov 22 '18 at 6:10











            • @mickl Glad to know it is helpful.;-)

              – Joy Wang
              Nov 22 '18 at 6:11














            1












            1








            1







            Currently, azure logic seems not support to run powershell and cli script, here is a voice in azure feedback, you could vote it.



            Workaround:



            If you want to start and stop the webjob, you can call the Kudu WebJobs API in the logic app.



            You can follow the steps below.



            1.Run the powershell command locally to generate the Authorization token of your web app.



            $creds = Invoke-AzureRmResourceAction -ResourceGroupName joywebapp -ResourceType Microsoft.Web/sites/config -ResourceName joywebapp2/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
            $username = $creds.Properties.PublishingUserName
            $password = $creds.Properties.PublishingPassword
            $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))


            The $base64AuthInfo is what we need, it should be like JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j.



            The token will never be changed except you reset the publish profile, so you just need to do this step once.



            2.In the logic app, specific the Method, URI, Headers(The header should be like
            Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j, note use space to separate the Basic and token), for example , I start a triggered webjob in my web app.



            enter image description here



            Triggered result:



            enter image description here



            So you just need to follow the steps above, for your issue, refer to the APIS:




            1. Start a continuous job

            2. Stop a continuous job






            share|improve this answer















            Currently, azure logic seems not support to run powershell and cli script, here is a voice in azure feedback, you could vote it.



            Workaround:



            If you want to start and stop the webjob, you can call the Kudu WebJobs API in the logic app.



            You can follow the steps below.



            1.Run the powershell command locally to generate the Authorization token of your web app.



            $creds = Invoke-AzureRmResourceAction -ResourceGroupName joywebapp -ResourceType Microsoft.Web/sites/config -ResourceName joywebapp2/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
            $username = $creds.Properties.PublishingUserName
            $password = $creds.Properties.PublishingPassword
            $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))


            The $base64AuthInfo is what we need, it should be like JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j.



            The token will never be changed except you reset the publish profile, so you just need to do this step once.



            2.In the logic app, specific the Method, URI, Headers(The header should be like
            Authorization: Basic JGpveXdlYmFwcDI6NnJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzRktSdXlUcU5acUUzdFhNb05j, note use space to separate the Basic and token), for example , I start a triggered webjob in my web app.



            enter image description here



            Triggered result:



            enter image description here



            So you just need to follow the steps above, for your issue, refer to the APIS:




            1. Start a continuous job

            2. Stop a continuous job







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 22 '18 at 3:13

























            answered Nov 22 '18 at 3:04









            Joy WangJoy Wang

            8,2502314




            8,2502314













            • In the meantime I've used Azure Automation and Runbooks however your answer is a great alternative and definitely needs to be accepted, thanks a lot !

              – mickl
              Nov 22 '18 at 6:10











            • @mickl Glad to know it is helpful.;-)

              – Joy Wang
              Nov 22 '18 at 6:11



















            • In the meantime I've used Azure Automation and Runbooks however your answer is a great alternative and definitely needs to be accepted, thanks a lot !

              – mickl
              Nov 22 '18 at 6:10











            • @mickl Glad to know it is helpful.;-)

              – Joy Wang
              Nov 22 '18 at 6:11

















            In the meantime I've used Azure Automation and Runbooks however your answer is a great alternative and definitely needs to be accepted, thanks a lot !

            – mickl
            Nov 22 '18 at 6:10





            In the meantime I've used Azure Automation and Runbooks however your answer is a great alternative and definitely needs to be accepted, thanks a lot !

            – mickl
            Nov 22 '18 at 6:10













            @mickl Glad to know it is helpful.;-)

            – Joy Wang
            Nov 22 '18 at 6:11





            @mickl Glad to know it is helpful.;-)

            – Joy Wang
            Nov 22 '18 at 6:11













            0














            Finally I ended up with a solution which takes advantage of Azure Automation. From Azure Portal we can create new Resource typing in Automation:



            enter image description here



            Once the resource is created we can add new Runbook under runbooks tab:



            enter image description here



            Runbook can run Powershell Workflow and get authorized using AzureRunAsConnection option (details here). My sample Powershell which is supposed to restart WebJob an specific App Service looks like below:



            Workflow RestartMyWebJob
            {
            $Conn = Get-AutomationConnection -Name AzureRunAsConnection
            Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

            $AzureContext = Select-AzureRmSubscription -SubscriptionId $Conn.SubscriptionID

            $Apiversion = "2015-08-01"
            $ResourceGroupName = 'My-Resource-Group-Name'
            $ResourceName = 'My-Resource-Group-Name/My-AppService--WebJob-Name'


            Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action stop -ApiVersion $Apiversion -Force
            Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action start -ApiVersion $Apiversion -Force
            }


            Having this Workflow setup we can run it from Azure Logic Apps by adding new block to our logic.



            enter image description here






            share|improve this answer




























              0














              Finally I ended up with a solution which takes advantage of Azure Automation. From Azure Portal we can create new Resource typing in Automation:



              enter image description here



              Once the resource is created we can add new Runbook under runbooks tab:



              enter image description here



              Runbook can run Powershell Workflow and get authorized using AzureRunAsConnection option (details here). My sample Powershell which is supposed to restart WebJob an specific App Service looks like below:



              Workflow RestartMyWebJob
              {
              $Conn = Get-AutomationConnection -Name AzureRunAsConnection
              Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

              $AzureContext = Select-AzureRmSubscription -SubscriptionId $Conn.SubscriptionID

              $Apiversion = "2015-08-01"
              $ResourceGroupName = 'My-Resource-Group-Name'
              $ResourceName = 'My-Resource-Group-Name/My-AppService--WebJob-Name'


              Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action stop -ApiVersion $Apiversion -Force
              Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action start -ApiVersion $Apiversion -Force
              }


              Having this Workflow setup we can run it from Azure Logic Apps by adding new block to our logic.



              enter image description here






              share|improve this answer


























                0












                0








                0







                Finally I ended up with a solution which takes advantage of Azure Automation. From Azure Portal we can create new Resource typing in Automation:



                enter image description here



                Once the resource is created we can add new Runbook under runbooks tab:



                enter image description here



                Runbook can run Powershell Workflow and get authorized using AzureRunAsConnection option (details here). My sample Powershell which is supposed to restart WebJob an specific App Service looks like below:



                Workflow RestartMyWebJob
                {
                $Conn = Get-AutomationConnection -Name AzureRunAsConnection
                Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

                $AzureContext = Select-AzureRmSubscription -SubscriptionId $Conn.SubscriptionID

                $Apiversion = "2015-08-01"
                $ResourceGroupName = 'My-Resource-Group-Name'
                $ResourceName = 'My-Resource-Group-Name/My-AppService--WebJob-Name'


                Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action stop -ApiVersion $Apiversion -Force
                Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action start -ApiVersion $Apiversion -Force
                }


                Having this Workflow setup we can run it from Azure Logic Apps by adding new block to our logic.



                enter image description here






                share|improve this answer













                Finally I ended up with a solution which takes advantage of Azure Automation. From Azure Portal we can create new Resource typing in Automation:



                enter image description here



                Once the resource is created we can add new Runbook under runbooks tab:



                enter image description here



                Runbook can run Powershell Workflow and get authorized using AzureRunAsConnection option (details here). My sample Powershell which is supposed to restart WebJob an specific App Service looks like below:



                Workflow RestartMyWebJob
                {
                $Conn = Get-AutomationConnection -Name AzureRunAsConnection
                Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

                $AzureContext = Select-AzureRmSubscription -SubscriptionId $Conn.SubscriptionID

                $Apiversion = "2015-08-01"
                $ResourceGroupName = 'My-Resource-Group-Name'
                $ResourceName = 'My-Resource-Group-Name/My-AppService--WebJob-Name'


                Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action stop -ApiVersion $Apiversion -Force
                Invoke-AzureRmResourceAction -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/ContinuousWebJobs -ResourceName $ResourceName -Action start -ApiVersion $Apiversion -Force
                }


                Having this Workflow setup we can run it from Azure Logic Apps by adding new block to our logic.



                enter image description here







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Feb 16 at 19:04









                micklmickl

                15.2k51639




                15.2k51639






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53414671%2fazure-logic-apps-how-to-run-powershell-script-or-azure-cli%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Guess what letter conforming each word

                    Port of Spain

                    Run scheduled task as local user group (not BUILTIN)