Azure DevOps - 自定义任务 - 具有 Azure 身份验证的 PowerShell

2024-04-13

到目前为止,我使用 Azure PowerShell 任务在 Azure 上下文中执行 PowerShell 脚本(https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-powershell?view=vsts https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-powershell?view=vsts)。由于泛化工作,我现在想创建一个自定义任务(参见例如http://www.donovanbrown.com/post/how-do-i-upload-a-custom-task-for-build http://www.donovanbrown.com/post/how-do-i-upload-a-custom-task-for-build)在 Azure 上下文中运行 PowerShell 脚本,即针对 Azure DevOps 中的连接终结点进行身份验证。

我怎样才能实现这个目标?


首先,您需要一个服务主体(参见例如https://learn.microsoft.com/en-us/powershell/azure/create-azure-service-principal-azureps?view=azps-1.1.0 https://learn.microsoft.com/en-us/powershell/azure/create-azure-service-principal-azureps?view=azps-1.1.0)和服务连接(参见例如https://learn.microsoft.com/en-us/azure/devops/pipelines/library/connect-to-azure?view=vsts https://learn.microsoft.com/en-us/azure/devops/pipelines/library/connect-to-azure?view=vsts).

在自定义任务中task.json添加一个输入以便能够选择服务连接:

"inputs": [
        {
            "name": "ConnectedServiceName",
            "type": "connectedService:AzureRM",
            "label": "Azure RM Subscription",
            "defaultValue": "",
            "required": true,
            "helpMarkDown": "Select the Azure Resource Manager subscription for the deployment."
        }
]

在任务(powershell 脚本)中,您通过以下方式获取此输入

$serviceNameInput = Get-VstsInput -Name ConnectedServiceNameSelector -Default 'ConnectedServiceName'
$serviceName = Get-VstsInput -Name $serviceNameInput -Default (Get-VstsInput -Name DeploymentEnvironmentName)

然后验证:

try {
    $endpoint = Get-VstsEndpoint -Name $serviceName -Require
    if (!$endpoint) {
        throw "Endpoint not found..."
    }
    $subscriptionId = $endpoint.Data.SubscriptionId
    $tenantId = $endpoint.Auth.Parameters.TenantId
    $servicePrincipalId = $endpoint.Auth.Parameters.servicePrincipalId
    $servicePrincipalKey = $endpoint.Auth.Parameters.servicePrincipalKey

    $spnKey = ConvertTo-SecureString $servicePrincipalKey -AsPlainText -Force
    $credentials = New-Object System.Management.Automation.PSCredential($servicePrincipalId,$spnKey)

    Add-AzureRmAccount -ServicePrincipal -TenantId $tenantId -Credential $credentials
    Select-AzureRmSubscription -SubscriptionId $subscriptionId -Tenant $tenantId

    $ctx = Get-AzureRmContext
    Write-Host "Connected to subscription '$($ctx.Subscription)' and tenant '$($ctx.Tenant)'..."
} catch {
    Write-Host "Authentication failed: $($_.Exception.Message)..." 
}

Edit:

清除脚本开头和结尾处的上下文很有用。你可以通过以下方式做到这一点

Clear-AzureRmContext -Scope Process
Disable-AzureRmContextAutosave

在开始时和

Disconnect-AzureRmAccount -Scope Process
Clear-AzureRmContext -Scope Process

在最后。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure DevOps - 自定义任务 - 具有 Azure 身份验证的 PowerShell 的相关文章

  • 正确配置JDK环境变量后仍然找不到java命令

    我在 Windows 虚拟机启动时安装 JDK 使用 cloudinit 用户数据将 PowerShell 脚本传输到 Windows 计算机 然后运行该脚本来安装 JDK softwares Get ItemProperty HKLM S
  • Azure 2012 年 10 月 SDK 损坏 UseDevelopmentStorage=true

    有人尝试过使用 usedevelopmentstorage true 连接字符串的 2012 年 10 月 Azure sdk 吗 CloudStorageAccount Parse UseDevelopmentStorage true 抛
  • 并行启动服务

    我有一个脚本可以检查不同服务器上的某些服务是否已启动 如果没有启动 该脚本应该启动该服务 问题是 它不会并行启动服务 而是等待每个服务启动 Code server list Get Content path D Path list of s
  • Windows Azure 远程站点“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册[重复]

    这个问题在这里已经有答案了 以下代码在我的本地开发计算机上可以正常运行 但是当我部署它时 我收到以下错误消息Azure 远程网站 我已经查看了SO答案和谷歌搜索结果 但我仍然不清楚我必须在本地计算机上安装什么 这样当我将代码推送到Azure
  • 如何在 Asp.Net MVC 上实现客户端 Ajax 登录(Asp.Net Webforms 解决方案的链接位于此处)

    我正在尝试在 Asp Net MVC 上实现客户端 ajax 登录 我以前在 WebForms 上设置得很好 但现在我已经转向 MVC 这给我带来了一些麻烦 如果您想要有关 Asp Net Webforms 的客户端 Ajax 登录的教程
  • PowerShell 模块中忽略 Write-Verbose

    我希望使用Write Verbose脚本和函数中的命令行开关 它在脚本 ps1 文件中按预期工作 但在模块 psm1 文件中则不然 该 commandlet 在模块中被忽略 运行以下脚本 PS gt scaffold ps1 verbose
  • 如何在 PowerShell 中比较本地文件与 FTP 服务器上的文件的年龄并下载远程复制是否较新

    我正在编写一个 PowerShell 脚本 以帮助我为工作设置新电脑 希望这不仅仅是我一个人会使用 所以我正在尝试考虑所有事情 我在 FTP 服务器上保存了离线安装程序 java flash reader 等 如果本地副本尚未保存在创建的
  • Azure 网站中的 404 处理

    我在 Azure 上有一个 MVC 网站 我已经编写了一个控制器操作来代表资源 该操作应该返回 HTTP 404 但正文内容应该是一些 HTML 我在其中解释了 404 的原因 这是作为一个标准操作实现的 该操作设置Response Sta
  • 如何识别 SQL Azure 中的死锁?

    我有一个由两个实例组成的 Windows Azure 角色 有时交易会失败并显示SqlException与以下文字 事务 进程 ID N 在锁资源上与另一个进程发生死锁 并被选为死锁牺牲品 重新运行事务 现在我已经谷歌搜索了一段时间并阅读这
  • Firebase Auth - 最近登录多长时间

    我有一个个人资料选项卡 用户可以在其中按编辑并编辑他们的个人资料 我只想在必要时才需要他们的密码 所以想知道用户登录的时间是多少毫秒 这使得它不是最近登录 其中firebase会抛出错误 auth requires recent login
  • 将密钥对添加到现有 EC2 实例

    我被给予AWS控制台访问正在运行 2 个实例的帐户 但我无法关闭 在生产中 但是 我想获得对这些实例的 SSH 访问权限 是否可以创建一个新的密钥对并将其应用到实例 以便我可以通过 SSH 访问 获取现有的pem当前无法选择创建实例所用的密
  • FileInfo.BaseName 存在于 PowerShell 中,但不存在于直接 .NET 中

    为什么在 NET 中System IO FileInfo对象没有BaseName属性 但我可以通过 PowerShell 使用该属性 例如 FolderItems Get ChildItem Path C Where Object isno
  • 尝试了解天蓝色云服务中的负载平衡

    我正在维护一个天蓝色的云服务 它有 1 个 Web 角色和几个辅助角色 该网络角色有多个实例 当我从资源中打开云服务时 我可以看到服务端点和公共IP地址 我想了解这个蔚蓝云服务中的流量负载是如何平衡的 我搜索了负载均衡器 但在订阅中找不到它
  • 具有客户端凭据 OAuth 流的 Dynamics CRM 2016 Online Rest API

    我正在尝试使用 Dynamics CRM 2016 Online 和 Azure Active Directory 进行身份验证 我能够按照此处的所有步骤进行操作 https msdn microsoft com en us library
  • 在 CosmosDb 中使用 /id 作为分区键的含义

    在每分钟有 1000 个条目 唯一键 进入 cosmos 的场景中 使用 id 作为分区键安全吗 特别是 有一个逻辑分区的概念https learn microsoft com en us azure cosmos db partition
  • 尝试在 powershell 5.1 中使用here-strings 但不起作用

    当我尝试在 PS 5 1 中使用此处字符串时 出现红色曲线 我缺少什么 function Main csv test1 test2 echo csv Main Error White space is not allowed before
  • Azure 和直播

    我正在尝试使用 Azure 制作实时视频流 但我真的不知道应该先尝试什么 首先 有一个网站 上面有最新版本的 Flowplayer 现在我需要知道如何将网络摄像头的视频流传输到 Azure 我需要什么样的软件 我正在尝试使用 Express
  • Powershell日期类型无法找到

    我正在尝试使用PowerShell连接virustotal API 代码来自virustotal网站 我得到 无法找到类型 System Security Cryptography ProtectedData 错误信息 代码如下 funct
  • .net Core:如何从 C# 代码传递参数并运行 Azure 数据工厂管道?

    我在用Microsoft Azure 管理 DataFactories net 核心包 我使用以下代码来获取访问 C net core 中的 azure 数据工厂管道所需的令牌 public static void RunDataFacto
  • Grails + Spring Security:无法登录

    我刚刚开始学习Grails和Spring 我已经按照官方教程创建了一个登录系统 但我无法登录 用户名或密码不匹配 我知道 90 的情况下这是由于双重编码或多个数据源 这也导致双重编码 造成的 但我也没有这样做 class BootStrap

随机推荐

  • 在 Resources.resx 中的 xaml 中使用图像

    在我的程序中 我有一个名为 test 的资源文件 其中包含图像 test png 我想在 XAML 文件中使用它 但是当程序运行时我看不到图像 我的代码 xmlns r clr namespace ProjectB Properties
  • 反射无法找到抽象类属性的私有设置器

    当我在抽象类中拥有此属性时 public IList
  • Ajax IndexedDB 删除当前成功上传

    我昨天发布了类似的内容 但它有效 但只删除了数据中的最后一个对象 我想要发生什么 这个ajax上传将处理大量数据 所以我使用indexeddb 这也将在手机上使用 因此 我希望它一次上传一项 如果一项失败 则仅删除数据中的前一项 这样他们就
  • Jest 在没有 webpack 的情况下配置 typescript

    好吧 我正在用 typescript 编写一些 NPM 模块 但我没有使用 Webpack 来编译脚本 我应该如何配置 jest 才能使用打字稿文件正确运行 test spec ts import calc from index test
  • 如何在集合中进行隐式转换?

    假设我有一个隐式转换 implicit def aToB a A B 如何让这种隐式转换适用于列表的元素 如果我有 val listOfA List A 我有一个接受 B 列表的函数 是否可以让 Scala 将所有元素从 A 隐式转换为 B
  • 如何清除EditText的焦点?

    我有一个带有搜索框的活动 EditText 位于顶部 ListView 位于下方 每当活动启动时 EditText 始终具有焦点并调出键盘 该键盘部分覆盖了ListView 没有其他文本视图可以获得焦点 我希望 EditText 仅在用户触
  • 通过 PowerShell 在远程计算机上设置环境变量

    我正在尝试通过 TFS Releasemanagement 通过调用 powershell 脚本来设置环境变量 该脚本应该在计算机上打开远程会话并设置环境变量 param Parameter Mandatory true String Re
  • 在 iOS 8.3 上测试应用程序时出错:Testflight 无法安装应用程序。此请求有错误

    我将 Xcode 更新到 7 2 我向测试人员发送了一个应用程序版本 一名测试人员出现以下错误 Testflight could not install app There was an error with this request 他的
  • 加入并包含在实体框架中

    我有以下 linq toEntity 查询 问题是它似乎没有加载 标签 关系 即使我已经为其添加了一个东西 如果我不加入标签 它工作正常 但我需要这样做 var items from i in db Items Include Tags f
  • 在 Windows 10 上,pipenv install/pipenv shell 无法与 Git Bash 一起使用

    在使用适用于 Windows 10 的 Git Bash 时 我很难让 Pipenv install 和 Pipenv shell 命令正常工作 使用 powershell 时 我能够成功创建一个新的虚拟环境并使用 Pipenv shell
  • 如何查看 Perforce 中的分支是否包含错误修复?

    我是一个新的 perforce 用户 但过去使用过许多其他源代码控制系统 我们使用变更列表来签入每个错误修复 更改列表注释包含错误 ID 因此可以轻松跟踪错误修复的时间签入分店 但是 我看不到一种简单的方法来查找给定错误修复的所有分支并入
  • 发送自动短信

    首先 我们使用 net sql server 我有一位客户对能够在预定时间发送短信的系统感兴趣 除了通过电子邮件网关发送短信之外 我从未做过类似的事情 例如 电子邮件受保护 cdn cgi l email protection 但是 我认为
  • Python 导入令人头疼

    我有以下目录结构 Main py A init py B init py C init py 文件Main py包含代码 from A import B from B import C The init py文件为空 当我跑步时Main p
  • 对向量元素进行向量化循环

    我发现很难对以下问题提出快速解决方案 我有一个观察向量 它表示观察某些现象的时间 example lt c 0 0 0 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 现在我想消除特定观察之间的零 假设某种现象会持续下去
  • 数字输入旋转框CSS代码编译为JSS

    我在转换时遇到问题CSS隐藏数字输入旋转框的代码JSS 我的问题是如何正确转换此代码以使其与 JSS 匹配 input webkit outer spin button input webkit inner spin button webk
  • 围绕图中的点绘制圆圈

    我有两个矩阵 timeline 0 0008 0 0012 0 0016 0 0020 0 0024 0 0028 原始数据 79 8400 69 9390 50 0410 55 5082 34 5200 37 4486 31 4237 2
  • Scala 编译器有哪些特殊类型?

    Scala 非常重视如何将看似语言的功能实现为库功能 是否有该语言特别处理的类型列表 是在规范中还是作为实现细节 例如 这包括优化元组的客场匹配 与模式匹配 推导式 try catch 块和其他语言结构相关的特殊约定又如何呢 String
  • CodeBuild 不报告失败的测试

    我正在使用 CodeBuild 构建我的 NPM 项目 我的构建规范中有一个特定的报告组 并且我正在使用 Jest 和npm test命令 当所有测试通过后 将成功报告给 CodeBuild 报告组 但是 如果其中一项测试失败 我会收到错误
  • 为什么 Google Analytics 不跟踪任何事件?

    我已经实现了几乎标准的示例
  • Azure DevOps - 自定义任务 - 具有 Azure 身份验证的 PowerShell

    到目前为止 我使用 Azure PowerShell 任务在 Azure 上下文中执行 PowerShell 脚本 https learn microsoft com en us azure devops pipelines tasks d