{"id":5630,"date":"2015-02-04T00:00:00","date_gmt":"2015-02-04T08:00:00","guid":{"rendered":""},"modified":"2025-09-16T12:28:54","modified_gmt":"2025-09-16T19:28:54","slug":"managing-on-premises-systems-with-azure-automation","status":"publish","type":"post","link":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/","title":{"rendered":"Managing On-Premises Systems with Azure Automation"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>[UPDATE: This blog has been &#8220;deprecated&#8221; by the release of the <a href=\"https:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/automation-hybrid-runbook-worker\/\" target=\"_blank\" rel=\"noreferrer noopener\">Hybrid Runbook Worker <\/a>feature. This feature provides a first-class way to achieve the functionality described here. Check it out!]<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also <a href=\"https:\/\/gallery.technet.microsoft.com\/scriptcenter\/How-to-Use-a-PowerShell-59b2e28c\" target=\"_blank\" rel=\"noreferrer noopener\">reach inside VMs and execute commands<\/a>. However, PowerShell Remoting is not always a viable option \u2013 perhaps a public WinRM port on your Azure VM cannot be opened for security reasons, or perhaps your VMs are strictly on-premises and therefore unreachable from Azure Automation. If you find yourself in one of these situations, all hope is not lost!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the first case, where you have Azure-hosted VMs but cannot open a public WinRM port, the solution is simple. A <a href=\"https:\/\/azure.microsoft.com\/blog\/2014\/12\/18\/azure-automation-run-tasks-on-azure-virtual-machines-without-opening-ports\/\" target=\"_blank\" rel=\"noreferrer noopener\">recent Microsoft blog post<\/a> provides a runbook for running PowerShell commands on such VMs by utilizing the Azure VM Agent\u2019s <a href=\"https:\/\/azure.microsoft.com\/blog\/2014\/04\/24\/automating-vm-customization-tasks-using-custom-script-extension\/\" target=\"_blank\" rel=\"noreferrer noopener\">Custom Script Extension<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, we present an extension to this solution which handles the second case \u2013 where your VMs are on-premises. If you have an <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/dn786406.aspx\" target=\"_blank\" rel=\"noreferrer noopener\">on-premises network connected to an Azure virtual network<\/a>, our solution will enable you to manage on-premises VMs from Azure Automation! And it does so with just a single runbook. But first, a little bit of setup is required\u2026<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configuring-your-environment\">Configuring Your Environment<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our runbook depends on a few resources being present in your Azure environment: a \u201cProxy VM\u201d, an Azure Storage Account, and a certificate installed both in Azure Automation and on your Proxy VM (for security reasons, explained below).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"proxy-vm\">\u201cProxy VM\u201d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The \u201cProxy VM\u201d is an Azure VM which will be used to invoke commands on other machines in its network \u2013 it is the mechanism by which Azure Automation will interact with these machines, hence \u201cproxy\u201d. The Proxy VM must have the Azure VM Agent installed. This agent is installed by default when an Azure VM is created, so most likely you already have such a machine. If you need to install the agent on an existing VM, you can learn how to do so from <a href=\"https:\/\/azure.microsoft.com\/blog\/2014\/04\/15\/vm-agent-and-extensions-part-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">this<\/a> blog post.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Running our runbook will enable the VM Agent\u2019s Custom Script Extension on the Proxy VM you specify, which allows that VM to download and execute scripts stored in an Azure Storage Account. Note that the Proxy VM will use PowerShell Remoting to communicate with other VMs in its network, so those VMs must have WinRM ports open to the network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Proxy VM is what enables management of on-premises machines<\/strong>, since Azure Virtual Networks can be connected to on-premises networks (details <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/dn786406.aspx\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>). If you have such a network, and use an Azure VM belonging to it as your Proxy VM, then that VM will be able to run commands on your on-premises machines.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"azure-storage-account\">Azure Storage Account<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Custom Script Extension (running on the Proxy VM) downloads scripts from a given Azure Storage account, so you will need to have one in your Azure environment. You can create a specific container for the extension to use, or allow the runbook to create and use a default container.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"certificate\">Certificate<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Since our runbook enlists a Proxy VM to execute PowerShell on other machines, it will need to know what credentials to use to do so. However, we don\u2019t want these credentials sitting around in plain text, so the runbook needs a way to encrypt them before they are baked into a script and handed off to Azure Storage (and ultimately, to the Proxy VM). The Proxy VM will then need to decrypt the credentials at runtime. So, our runbook requires a certificate to be installed both in Azure Automation and on the Proxy VM.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>Create the certificate:<\/strong> You will need to create a .pfx certificate to install on your Proxy VM. Either that certificate or its corresponding .cer certificate will also need to be uploaded to Azure Automation. For instructions on creating a certificate, see <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ff699202.aspx\" target=\"_blank\" rel=\"noreferrer noopener\">this<\/a> page.<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><strong>Upload the certificate to Azure Automation:<\/strong> In the Azure portal, navigate to the Automation service, choose your Automation Account, and click on the Assets tab. At the bottom of the page, click \u201cAdd Setting\u201d and you should see this wizard appear:<br><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"199\" class=\"wp-image-9162\" style=\"width: 450px\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.png\" alt=\"graphical user interface, text, application\"><br>Click on \u201cAdd Credential\u201d and configure it like so:<br><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"304\" class=\"wp-image-9164\" style=\"width: 450px\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/DefineCredentialFilledOut.png\" alt=\"graphical user interface, application\"><\/li>\n\n\n\n<li class=\"wp-block-list-item\">On the last page of the wizard, upload your certificate file. For security reasons, you should upload the .cer certificate to Azure Automation (since it lacks the private key, which Azure Automation doesn\u2019t need). Either the .cer or .pfx file will work, but if you upload the .pfx, please note that it should <strong>not<\/strong> be marked as exportable in Azure Automation.<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><strong>Install the certificate into the certificate store on your Proxy VM:<\/strong> Copy your .pfx certificate onto the Proxy VM, and double-click the file to start the import process. Make sure you select \u201cLocal Machine\u201d for the Store Location, and place the certificate in the Personal store (Cert:LocalMachineMy). This is where the code run by the Custom Script Extension will look to decrypt the credentials it needs. Using this location creates an important security boundary: only Administrators and SYSTEM can access the private keys of certificates in this store. This prevents unauthorized users from decrypting credentials used by the runbook after they are sent to the Proxy VM.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Congratulations, you are now ready to\u2026<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"run-the-runbook\">Run the Runbook!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now that you have the requisite resources available, it\u2019s time to run some code! Grab the runbook from <a href=\"https:\/\/gallery.technet.microsoft.com\/scriptcenter\/Use-an-Azure-VM-to-manage-f48e5145\" target=\"_blank\" rel=\"noreferrer noopener\">Script Center<\/a> or the <a href=\"https:\/\/azure.microsoft.com\/blog\/2014\/10\/07\/introducing-the-azure-automation-runbook-gallery\/\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Automation Runbook Gallery<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s an example call to this runbook:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$Results = Invoke-CommandViaProxy `\n        -ProxyVmName VM01 `\n        -ProxyServiceName VM01 `\n        -ScriptBlock \"{ 'Hello, my name is '; `$env:COMPUTERNAME}\" `\n        -TargetComputers VM02,VM03 `\n        -RunAsCredential $NetworkCred `\n        -CertificateAssetName \"MyProxyVmCert\" `\n        -AzureOrgIdCredential $OrgCred `\n        -AzureSubscriptionName $SubscriptionName `\n        -StorageAccountName $StorageAccountName\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">And explanations of the parameters involved:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">ProxyVmName, ProxyServiceName<br>These parameters identify your Proxy VM, which needs to have the Azure VM Agent installed and be on the same network as the machines you want to run commands on.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">ScriptBlock<br>The commands you want executed on machines in the Proxy VM\u2019s network, given as a string. Make sure you escape special characters properly when writing this script block (e.g., \u201c{`$a = Get-Date }\u201d). This is necessary to prevent the runbook execution engine from trying to substitute values for any variables in your script.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">TargetComputers<br>A list of the host names of machines where the script block should be run. Note that these machines must have the WinRM port open, since the Proxy VM will use PowerShell Remoting to execute the given script block on them.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">RunAsCredential<br>A PowerShell Credential Object. The script\u00a0 block will be run on the targeted computers with this credential.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">CertificateAssetName<br>The runbook will use this certificate asset to encrypt the RunAsCredential\u2019s password. On the Proxy VM, the same certificate\u2019s private key will be used to decrypt that password.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">AzureOrgIdCredential<br>A PowerShell Credential Object, which will be used by the runbook to authenticate itself to Azure.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">AzureSubscriptionName<br>The name of the Azure Subscription containing your Proxy VM and Azure Storage Account.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">StorageAccountName<br>The name of the Azure Storage Account in which the runbook will store the script file it generates. This file will be removed when the runbook has finished.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">There are some optional parameters as well for further customizing the runbook\u2019s behavior, all of which have default values which are described in the runbook itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The runbook will return the script block\u2019s output as a PowerShell object by default. If the script runs on multiple machines, you will get an array of objects back, one for each machine on which the script ran. There is one small \u201cgotcha\u201d here: because the output comes back through the Custom Script Extension\u2019s somewhat small output field, objects that are \u201clarge\u201d may get truncated (the output field can store 4096 characters). If you expect your serialized output to exceed that length, you may want to do some script-side filtering, or you can set the runbook\u2019s SerializeOutput parameter to $False, and get raw text back.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, note that the Custom Script Extension can only run one script at a time. If you call this runbook against the same Proxy VM multiple times without waiting for completion, it will only run the most recent request, or whatever it was busy running first.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s it! Now you know how to use Azure Automation to securely run scripts on VMs that are in private networks, or even on-premises. For more cool ways to use Azure Automation, be sure to check out other posts&nbsp;under the&nbsp;<a href=\"https:\/\/azure.microsoft.com\/blog\/topics\/it-pro-devops\/\">Azure IT Pro\/DevOps category<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Just getting started with Azure Automation? Learn about the service <a href=\"https:\/\/aka.ms\/Q2p1ap\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>, and follow Azure Automation on <a href=\"https:\/\/twitter.com\/AzureAutomation\" target=\"_blank\" rel=\"noreferrer noopener\">Twitter<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Happy Automating!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also reach inside VMs and execute commands.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","footnotes":"","msx_community_cta_settings":[]},"categories":[1482],"tags":[],"audience":[3054,3053],"content-type":[1511],"product":[393],"tech-community":[],"topic":[],"coauthors":[97],"class_list":["post-5630","post","type-post","status-publish","format-standard","hentry","category-management-and-governance","audience-business-decision-makers","audience-it-decision-makers","content-type-best-practices","product-automation","review-flag-1680286580-543","review-flag-1680286581-295","review-flag-1680286584-658","review-flag-alway-1680286580-106","review-flag-vm-1680286585-143"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Managing On-Premises Systems with Azure Automation | Microsoft Azure Blog<\/title>\n<meta name=\"description\" content=\"Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also reach inside VMs and execute commands.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Managing On-Premises Systems with Azure Automation | Microsoft Azure Blog\" \/>\n<meta property=\"og:description\" content=\"Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also reach inside VMs and execute commands.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Azure Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/microsoftazure\" \/>\n<meta property=\"article:published_time\" content=\"2015-02-04T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-16T19:28:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.png\" \/>\n\t<meta property=\"og:image:width\" content=\"480\" \/>\n\t<meta property=\"og:image:height\" content=\"199\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Microsoft Azure\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@azure\" \/>\n<meta name=\"twitter:site\" content=\"@azure\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Azure\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/\"},\"author\":[{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/microsoft-azure\/\",\"@type\":\"Person\",\"@name\":\"Microsoft Azure\"}],\"headline\":\"Managing On-Premises Systems with Azure Automation\",\"datePublished\":\"2015-02-04T08:00:00+00:00\",\"dateModified\":\"2025-09-16T19:28:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/\"},\"wordCount\":1408,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.png\",\"articleSection\":[\"Management and governance\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/\",\"name\":\"Managing On-Premises Systems with Azure Automation | Microsoft Azure Blog\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.png\",\"datePublished\":\"2015-02-04T08:00:00+00:00\",\"dateModified\":\"2025-09-16T19:28:54+00:00\",\"description\":\"Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also reach inside VMs and execute commands.\",\"breadcrumb\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.webp\",\"width\":480,\"height\":199,\"caption\":\"graphical user interface, text, application\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog home\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Management and governance\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/management-and-governance\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Managing On-Premises Systems with Azure Automation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"name\":\"Microsoft Azure Blog\",\"description\":\"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.\",\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\",\"name\":\"Microsoft Azure Blog\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"width\":512,\"height\":512,\"caption\":\"Microsoft Azure Blog\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/microsoftazure\",\"https:\/\/x.com\/azure\",\"https:\/\/www.instagram.com\/microsoftdeveloper\/\",\"https:\/\/www.linkedin.com\/company\/16188386\",\"https:\/\/www.youtube.com\/user\/windowsazure\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/c702e5edd662b328b49b7e1180cab117\",\"name\":\"shakir\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"caption\":\"shakir\"},\"sameAs\":[\"https:\/\/azure.microsoft.com\"],\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Managing On-Premises Systems with Azure Automation | Microsoft Azure Blog","description":"Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also reach inside VMs and execute commands.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/","og_locale":"en_US","og_type":"article","og_title":"Managing On-Premises Systems with Azure Automation | Microsoft Azure Blog","og_description":"Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also reach inside VMs and execute commands.","og_url":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/","og_site_name":"Microsoft Azure Blog","article_publisher":"https:\/\/www.facebook.com\/microsoftazure","article_published_time":"2015-02-04T08:00:00+00:00","article_modified_time":"2025-09-16T19:28:54+00:00","og_image":[{"width":480,"height":199,"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.png","type":"image\/png"}],"author":"Microsoft Azure","twitter_card":"summary_large_image","twitter_creator":"@azure","twitter_site":"@azure","twitter_misc":{"Written by":"Microsoft Azure","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#article","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/"},"author":[{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/microsoft-azure\/","@type":"Person","@name":"Microsoft Azure"}],"headline":"Managing On-Premises Systems with Azure Automation","datePublished":"2015-02-04T08:00:00+00:00","dateModified":"2025-09-16T19:28:54+00:00","mainEntityOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/"},"wordCount":1408,"commentCount":0,"publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.png","articleSection":["Management and governance"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/","name":"Managing On-Premises Systems with Azure Automation | Microsoft Azure Blog","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.png","datePublished":"2015-02-04T08:00:00+00:00","dateModified":"2025-09-16T19:28:54+00:00","description":"Thanks to the Windows PowerShell Remoting feature, Azure Automation can not only manage your Azure resources at an infrastructural level, but also reach inside VMs and execute commands.","breadcrumb":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#primaryimage","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2015\/02\/AddSettingWizard.webp","width":480,"height":199,"caption":"graphical user interface, text, application"},{"@type":"BreadcrumbList","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/managing-on-premises-systems-with-azure-automation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog home","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/"},{"@type":"ListItem","position":2,"name":"Management and governance","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/management-and-governance\/"},{"@type":"ListItem","position":3,"name":"Managing On-Premises Systems with Azure Automation"}]},{"@type":"WebSite","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","name":"Microsoft Azure Blog","description":"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.","publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization","name":"Microsoft Azure Blog","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","width":512,"height":512,"caption":"Microsoft Azure Blog"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/microsoftazure","https:\/\/x.com\/azure","https:\/\/www.instagram.com\/microsoftdeveloper\/","https:\/\/www.linkedin.com\/company\/16188386","https:\/\/www.youtube.com\/user\/windowsazure"]},{"@type":"Person","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/c702e5edd662b328b49b7e1180cab117","name":"shakir","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4","url":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","caption":"shakir"},"sameAs":["https:\/\/azure.microsoft.com"],"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/"}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Azure Blog","distributor_original_site_url":"https:\/\/azure.microsoft.com\/en-us\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/5630","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/comments?post=5630"}],"version-history":[{"count":1,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/5630\/revisions"}],"predecessor-version":[{"id":46358,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/5630\/revisions\/46358"}],"wp:attachment":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/media?parent=5630"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/categories?post=5630"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tags?post=5630"},{"taxonomy":"audience","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/audience?post=5630"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/content-type?post=5630"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/product?post=5630"},{"taxonomy":"tech-community","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tech-community?post=5630"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/topic?post=5630"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/coauthors?post=5630"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}