运行 Azure 中强大的 shell 脚本

Running a power shell script in Azure

您好,我是 运行在 azure 中使用 powershell 脚本的新手,正在寻找最佳指导?

我创建了一个 powershell 脚本来定位资源组中的 运行ning 台机器并输出到文本文件,

在 Azure 中自动安排此脚本 运行 的最佳方法是什么?

脚本如下:

#Login-AzureRmAccount 
#$sub = Get-AzureRmSubscription | Out-GridView -PassThru | Set-AzureRmContext

$path="dcsppomsstorage.blob.core.windows.net/dcsvmpowerstate/activeserver1.txt"
function SPWservers {

[string]$ResourceGroupName = "*DCS-PP*"


$VMresourcegroups = (Get-AzureRmResourceGroup).Where({$_.ResourceGroupName -like $ResourceGroupName})
foreach($VMresourcegroup in $VMresourcegroups){
$vms=Get-AzureRmVM -ResourceGroupName $VMresourcegroup.ResourceGroupName
foreach ($vm in $vms)
{

$Status = (get-azurermvm -ResourceGroupName $VMresourcegroup.ResourceGroupName -Name $vm.Name -Status).Statuses

Write "powerstate for $($vm.Name) is $($Status[1].DisplayStatus)" | Format-Table $vm.Name, $Status[1].DisplayStatus -GroupBy $vm.name

}
}
}




SPWservers| out-file $path

Azure 自动化正是您要找的。它易于使用并且效果很好。除此之外,您还可以在免费套餐中 运行 编写最多 500 分钟的脚本。有关以下 link 的更多信息:

https://docs.microsoft.com/en-us/azure/automation/automation-offering-get-started

如果出于某种原因您想探索其他选项,还有 Azure Functions 和 Azure Web Jobs。

Azure 函数:

https://blogs.msdn.microsoft.com/powershell/2017/02/24/using-powershell-modules-in-azure-functions/

网络工作:

https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-create-web-jobs

正如 Bruno Faria 所说,我们可以使用 Azure 自动化来做到这一点。

但目前,我们无法将 Runbook 作业的输出直接保存到 Azure 存储 blob。

作为解决方法,我们可以在 Azure 门户中检查输出。 像这样的脚本:

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
function SPWservers {
[string]$ResourceGroupName = "vms"
$VMresourcegroups = (Get-AzureRmResourceGroup).Where({$_.ResourceGroupName -like $ResourceGroupName})
foreach($VMresourcegroup in $VMresourcegroups){
$vms=Get-AzureRmVM -ResourceGroupName $VMresourcegroup.ResourceGroupName
foreach ($vm in $vms)
{

$Status = (get-azurermvm -ResourceGroupName $VMresourcegroup.ResourceGroupName -Name $vm.Name -Status).Statuses

Write "powerstate for $($vm.Name) is $($Status[1].DisplayStatus)" | Format-Table $vm.Name, $Status[1].DisplayStatus -GroupBy $vm.name

}
}
}

SPWservers| write-output

此 Runbook 作业完成后,我们可以在此处找到 输出

关于 Azure runbook schedules,我们可以在这里设置:

有关在 Azure 自动化中安排 Runbook 的更多信息,请参阅此 article

我会推荐 PowerShell 运行book Azure Automation 作为解决您的问题的最佳指南。

PowerShell runbooks

PowerShell runbooks are based on Windows PowerShell. You directly edit the code of the runbook using the text editor in the Azure portal. You can also use any offline text editor and import the runbook into Azure Automation. Advantages

Implement all complex logic with PowerShell code without the additional complexities of PowerShell Workflow. Runbook starts faster than PowerShell Workflow runbooks since it doesn't need to be compiled before running.

https://docs.microsoft.com/en-us/azure/automation/automation-runbook-types#powershell-runbooks

您可以在您想要的时间和频率安排您的 PowerShell 运行本书到 运行。

此外,如果您使用的是免费套餐并且您每月的总工作 运行 时间少于 500 分钟,则 Azure Automation 的定价是免费的。如果您没有很多 VM,并且您的工作频率不是很频繁,您很可能能够在 Azure 中免费完成您的工作。

这里有一个很好的入门教程 PowerShell runbook