[玩转系统] 如何使用 Azure 自动化 - [完整指南]
作者:精品下载站 日期:2024-12-14 03:38:52 浏览:16 分类:玩电脑
如何使用 Azure 自动化 - [完整指南]
Azure 自动化是在云中运行 PowerShell 脚本的最流行的工具之一。例如,您不仅可以使用 Runbook 管理 Azure 环境,还可以管理 Microsoft Office 365 租户。
自动化是 IT 的关键部分,作为系统管理员,您应该努力实现大部分日常/手动任务的自动化。一开始编写脚本可能需要一些时间,但从长远来看会节省你很多时间。
在本文中,我将解释如何设置 Azure 自动化帐户以及如何在 Azure 中创建第一个 PowerShell Runbook。
Azure 自动化要求
开始在 Azure 中运行 PowerShell 脚本只有几个要求:
- Azure 订阅(即用即付)
- Azure 自动化帐户
您可以从 Azure 订阅的免费试用开始,但按量付费订阅也不是很贵。
建议
从 2023 年 9 月开始,我们无法再使用 RunAs 帐户。确保在此日期之前迁移 Runbook 以使用托管标识进行身份验证。阅读本文中有关托管身份的所有内容。Azure 自动化定价
Azure 自动化的定价基于作业运行的分钟数。每次订阅,您每月可以免费获得 500 分钟的作业运行时间和 744 小时的观察者时间。
Job run time500分钟
Watchers744小时
为了给您提供一个想法,一个简单的脚本只需 1 分钟即可检查我的租户中所有用户的 MFA 状态。创建 SharePoint 团队网站并向其应用模板总共需要 30 秒。
因此,有了 500 分钟的免费时间,您应该能够自动化大部分日常任务 ? 并且每小时只需花费 0.12 美元。
Azure 自动化入门
要开始使用 Azure 自动化,我们需要创建一个 Azure 自动化帐户并安装正确的PowerShell 模块。
登录 Azure 门户
转到 https://portal.azure.com/ 并使用您的 Office 365 凭据登录。
转到自动化帐户服务
使用搜索栏查找自动化帐户服务
创建新的自动化帐户
单击创建创建一个新的自动化帐户。
- 为您的自动化帐户命名
- 选择您的订阅(免费试用或按需付费)
- 创建或选择资源组
创建资源组可能需要几分钟时间。开设您的 Azure 自动化帐户
创建后选择新的自动化帐户。
安装 PowerShell 模块
在开始创建第一个 Runbook 之前,我们首先需要安装必要的 PowerShell 模块。
选择模块,然后单击浏览库
安装以下模块:
- PnP.PowerShell
- AzureAD
- ExchangeOnlineManagement
我们现在已经创建了 Azure 自动化帐户,可以开始创建我们的第一个 Runbook。
使用 MFA 时在 Azure Runbook 中进行身份验证
Azure Runbooks 中的身份验证始终是一个挑战。您可以使用条件访问规则从 MFA 中排除 Azure 服务,但这需要您及时了解所有 IP 地址。
另一种选择是从 MFA 中排除服务帐户,但这不是最佳实践。服务帐户可能具有全局管理员权限,因此您希望正确保护这些帐户。
那么如何在 Azure Runbook 中向 AzureAD 或 Exchange Online 进行身份验证?好吧,我们可以使用 Azure 运行方式帐户。
在创建 Azure 自动化帐户期间,我们还自动创建了一个运行方式帐户。运行方式帐户使用自签名证书为 Azure Runbook、自动化和管理 Azure 资源管理器上的资源提供身份验证。
警告
从 2023 年 9 月开始,我们无法再使用 RunAs 帐户。确保在此日期之前迁移 Runbook 以使用托管标识进行身份验证。阅读本文中有关托管身份的所有内容。笔记
该证书的有效期仅为一年。您需要确保在证书过期之前更新证书。我们将为运行方式帐户分配正确的权限以访问 AzureAD、Exchange Online 和 SharePoint。首先,我们需要找到帐户的 objectId 。
- 在Azure 自动化帐户中选择作为帐户运行。
- 记下服务主体对象 ID
我们将一一添加正确的权限。您可以在我的 Github 上找到完整的脚本,该脚本将在一次运行中设置所有权限。
从 Azure Runbook 连接到 AzureAD
我们将首先授予我们的服务主体帐户访问 AzureAD 的正确权限。确保本地安装了 AzureAD 模块并打开 PowerShell。
首先连接到 Azure AD 并将服务主体对象 ID 替换为你自己的对象 ID。
# Connect to Azure AD
Connect-AzureAD
# Get the Service Principal based on the object Id
$servicePrincipalObjectId = "6dgw124-0000-1111-1337-abc123def456"
如果您只需要从 AzureAD 读取数据,则可以为服务主体授予目录读取者角色。
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Directory Reader"}).Objectid -RefObjectId $servicePrincipalObjectId
另一种选择是使其成为全局管理员,以便它可以完全管理您的 Active Directory:
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Company Administrator"}).Objectid -RefObjectId $servicePrincipalObjectId
您可以使用以下 cmd 列出租户中的所有可用角色
Get-AzureADDirectoryRole
现在,您可以使用 PowerShell Runbook 中的以下代码连接到 AzureAD。
# Get the service principal connection details
$spConnection = Get-AutomationConnection -Name AzureRunAsConnection
# Connect AzureAd
Connect-AzureAD -TenantId $spConnection.TenantId -ApplicationId $spConnection.ApplicationID -CertificateThumbprint $spConnection.CertificateThumbprint | No-Output
# Test connection:
"User count:"
(Get-AzureADUser).count
从 Azure Runbook 连接到 Exchange Online
需要执行一个额外步骤来授予服务主体帐户对 Exchange Online 的访问权限。我们必须为其授予 Exchange 管理员角色和适当的 API 权限。
# Connect to Azure AD
Connect-AzureAD
# Get the Service Principal based on the object Id
$servicePrincipalObjectId = "6dgw124-0000-1111-1337-abc123def456"
# Assign the Exchange Administrator Role
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Exchange Administrator"}).Objectid -RefObjectId $servicePrincipalObjectId
如果您的租户中没有 Exchange 管理员角色,则可以使用以下代码启用它:
if (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Exchange Administrator"} -eq $null) {
Enable-AzureADDirectoryRole -RoleTemplateId (Get-AzureADDirectoryRoleTemplate | Where-Object {$_.DisplayName -eq "Exchange Administrator"}).Objectid
}
对于 Exchange Online API 权限,我们可以使用以下代码:
# Get the Office 365 Exchange Online App
$EXOApp = (Get-AzureADServicePrincipal -Filter "AppID eq '00000002-0000-0ff1-ce00-000000000000'")
$servicePrincipal = Get-AzureADServicePrincipal -ObjectId $servicePrincipalObjectId
# Get the roles
$permission = $EXOApp.AppRoles | Where-Object { $_.Value -eq 'Exchange.ManageAsApp' }
# Create the permission object
$apiPermission = [Microsoft.Open.AzureAD.Model.RequiredResourceAccess]@{
ResourceAppId = $EXOApp.AppId ;
ResourceAccess = [Microsoft.Open.AzureAD.Model.ResourceAccess]@{
Id = $permission.Id ;
Type = "Role"
}
}
$Application = Get-AzureADApplication | Where-Object {$_.AppId -eq $servicePrincipal.AppId}
$Application | Set-AzureADApplication -ReplyUrls 'http://localhost'
$Application | Set-AzureADApplication -RequiredResourceAccess $apiPermission
您现在需要做的就是授予管理员同意我们分配的权限。
- 打开您的Azure Active Directory
- 选择应用注册
- 点击所有应用程序并选择您的自动化帐户
- 转到 API 权限
- 点击授予管理员同意
现在,您可以使用以下 PowerShell 代码在 Azure Runbook 中连接到 Exchange Online:
# Get the service principal connection details
$spConnection = Get-AutomationConnection -Name AzureRunAsConnection
# Set your tenant name
$tenantName = "contoso.onmicrosoft.com"
# Connect to ExchangeOnline
Connect-ExchangeOnline -CertificateThumbprint $spConnection.CertificateThumbprint -AppId $spConnection.ApplicationID -Organization $tenantName
# Test connection
(Get-ExoMailbox).count
从 Azure Runbook 连接到 SharePoint/PnPOnline
如果要在 Azure Runbook 中使用 PnPOnline,则需要授予对 SharePoint API 甚至 Graph 的访问权限。
我使用一些权限来自动创建 SharePoint 网站并应用具有默认文件夹的模板。您可能不需要所有权限,但这为您提供了设置它们的想法。
# Get Office 365 SharePoint Online App
$spApp = (Get-AzureADServicePrincipal -Filter "AppID eq '00000003-0000-0ff1-ce00-000000000000'")
# Get the roles
# All sites full control
$spSitesControl = $SPApp.AppRoles | Where-Object { $_.Value -eq 'Sites.FullControl.All' }
# User read write
$spUserControl= $SPApp.AppRoles | Where-Object { $_.Value -eq 'User.ReadWrite.All' }
# TermStore
$spTermControl= $SPApp.AppRoles | Where-Object { $_.Value -eq 'TermStore.ReadWrite.All' }
# NOTE: If you format the code below nicely, and copy-paste it, it will make typeID from the Id attribute :s
$spPermission = [Microsoft.Open.AzureAD.Model.RequiredResourceAccess]@{
ResourceAppId = $spApp.AppId ;
ResourceAccess = [Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $spSitesControl.Id;Type = "Role";},
[Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $spUserControl.Id;Type = "Role";},
[Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $spTermControl.Id ;Type = "Role";}
}
$Application = Get-AzureADApplication | Where-Object {$_.AppId -eq $servicePrincipal.AppId}
$Application | Set-AzureADApplication -ReplyUrls 'http://localhost'
$Application | Set-AzureADApplication -RequiredResourceAccess $spPermission
同样,您需要授予管理员同意权限:
- 打开您的Azure Active Directory
- 选择应用注册
- 点击所有应用程序并选择您的自动化帐户
- 转到 API 权限
- 点击授予管理员同意
要连接到 PnPOnline,您可以在 Azure Runbook 中使用以下代码:
# Get the service principal connection details
$spConnection = Get-AutomationConnection -Name AzureRunAsConnection
# Connect to PnPOnline
Connect-PnPOnline -ClientId $spConnection.ApplicationID -Url "https://contoso.sharepoint.com" -Tenant contoso.onmicrosoft.com -Thumbprint $spConnection.CertificateThumbprint
# Test connection
(get-pnptenantsite).count
我还需要访问 Graph,因此也添加了 API 权限:
#
# Get Graph App
#
$graphApp = (Get-AzureADServicePrincipal -Filter "AppID eq '00000003-0000-0000-c000-000000000000'")
# Group read write
$graphGroupControl = $graphApp.AppRoles | Where-Object { $_.Value -eq 'Group.ReadWrite.All' }
# User read write
$graphUserControl = $graphApp.AppRoles | Where-Object { $_.Value -eq 'User.ReadWrite.All' }
# NOTE: If you format the code below nicely, and copy-paste it, it will make typeID from the Id attribute :s
$graphPermission = [Microsoft.Open.AzureAD.Model.RequiredResourceAccess]@{
ResourceAppId = $graphApp.AppId ;
ResourceAccess = [Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $graphGroupControl.Id;Type = "Role";},
[Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $graphUserControl.Id;Type = "Role";}
}
$Application = Get-AzureADApplication | Where-Object {$_.AppId -eq $servicePrincipal.AppId}
$Application | Set-AzureADApplication -ReplyUrls 'http://localhost'
$Application | Set-AzureADApplication -RequiredResourceAccess $graphPermission
再次在 Azure AD 中授予管理员同意。
如果您已连接 PnPOnline,那么您可以轻松获取访问令牌以连接到 Graph:
# User Graph
$accessToken = Get-PnPAccessToken
$header = @{
"Content-Type" = "application/json"
Authorization = "Bearer $accessToken"
}
# Get users to test Graph
Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/" -Method Get -Headers $header
Azure Active Directory 中所有权限的结果应如下所示:
您还可以将 Azure 门户中的权限添加到您的服务主体帐户。如果您不知道要查找的确切权限名称,这可能会更方便。
在 Azure 活动目录中:
- 选择应用注册
- 点击所有应用程序并选择您的自动化帐户
- 转到API权限
- 点击添加权限
- 选择您需要的API,例如 SharePoint
- 选择应用程序权限并选择您需要的权限。
在 Azure 自动化 Runbook 中使用变量
在开始创建第一个 Runbook 之前,我们首先要了解一下变量的使用。您可以在自动化帐户中定义可在 Runbook 中使用和更改的全局变量。您可以创建不同类型的变量,并且它们也可以加密。
如果您在 Azure 自动化帐户中向下滚动,您将在共享资源下找到变量。
- 打开变量
- 点击添加变量
- 给你的变量一个名称
- 选择类型(字符串、布尔值、日期时间、整数、未指定)
- 输入值
- 选择是否加密
创建 Azure Runbook
设置 Azure 自动化帐户并分配所有权限后,我们可以开始创建第一个 Runbook。
在您的 Azure 自动化帐户中,您将找到Runbook。您的帐户中已有一些教程操作手册,但我们将创建一个新的操作手册。
- 单击创建运行手册
- 给您的操作手册起一个有意义的名称
- 选择 PowerShell 作为 Runbook 类型,并可能选择描述 Runbook 功能的说明。
- 点击创建
在此示例中,我们将创建一个 Runbook,为除几个应用程序帐户之外的所有用户禁用 SMTP 身份验证。如果您想了解有关保护 Office 365 租户的更多信息,请务必阅读这些提示。
您的新 Runbook 打开后基本上是一个空白的 PowerShell 脚本。在左侧,您将找到可用 CMDLet 的概述、Runbook 列表(您可以从 Runbook 中触发其他 Runbook)和资产。
资产可以是您在自动化帐户、连接、存储的凭据和证书中声明的变量。
要禁用 SMTP 身份验证,我们将连接到 Exchange Online。为此,我们需要 Azure 运行方式连接和我添加到变量中的租户名称。
如果您按照开头所述设置了权限,我们现在可以使用以下代码连接到 Exchange Online:
# Get the automation account and tenant name
$spConnection = Get-AutomationConnection -Name 'AzureRunAsConnection'
$tenantName = Get-AutomationVariable -Name 'tenantName'
# Connect to ExchangeOnline
Connect-ExchangeOnline -CertificateThumbprint $spConnection.CertificateThumbprint -AppId $spConnection.ApplicationID -Organization $tenantName
$exclusions = @("sa_signatureTool",
"sa_otherImportantTool"
)
$mailboxes = Get-CASMailbox | Where-Object {$_.SmtpClientAuthenticationDisabled -ne $true -and $_.Identity -notin $exclusions}
$mailboxes
foreach ($mailbox in $mailboxes) {
try {
Set-CASMailbox -Identity $mailbox.Identity -SmtpClientAuthenticationDisabled $true
[PSCustomObject]@{
UserPrincipalName = $mailbox.Identity
SmtpClientAuthenticationDisabled = $true
}
}
catch {
[PSCustomObject]@{
UserPrincipalName = $mailbox.Identity
SmtpClientAuthenticationDisabled = $false
}
}
}
# Close the connection
Disconnect-ExchangeOnline -Confirm:$false
在发布 Runbook 之前,您可以先在测试窗格中对其进行测试。这在编辑现有 Runbook 时非常有用,您可以在发布之前测试您的编辑,从而保持实时版本正常运行。
Azure 自动化计划
您可以安排 Runbook,使其按照设定的时间间隔自动运行。发布运行手册后,单击链接到计划
单击链接计划到您的 Runbook,为您的 Azure Runbook 选择(或创建)计划。一个计划可用于 Azure 自动化帐户中的多个 Runbook。
我们必须创建第一个时间表:
- 点击添加时间表
- 为您的日程安排一个名称
- 设置开始日期和时间
- 使其重复出现(或仅运行一次)
- 点击创建
创建计划后,单击“确定”将计划应用到您的 Runbook。如果需要,您可以将多个计划添加到 Runbook。
您的 Runbook 现在应该根据您创建的计划自动运行。您将在 Runbook 的概述屏幕中看到作业的概述。
总结
创建 Runbook 时,请务必确保在作业完成后关闭连接。否则,您可能最终会使用所有与 Exchange Online 的连接。
我希望本文可以帮助您开始创建 Azure Runbook 和/或设置 Office 365 身份验证。
如果您有任何疑问,请在下面发表评论。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag