Powershell / VSTS 构建 - 独立存储凭据/与用户运行脚本无关

2024-01-02

我正在尝试为构建创建一个脚本,用于签出文件、编辑文件并将其重新签入。

我希望它在作为开发人员或构建代理运行时能够工作。

我有一个类似的解决方案this https://stackoverflow.com/a/25455769/852806,密码存储在文件中并在构建时检索。

i.e.

文件创建:

read-host -prompt Password -assecurestring | convertfrom-securestring | out-file .\ps-password.pwd -ErrorAction Stop

文件使用:

# *VSTS Login*
$Username = $tfsUserName
$Password = Get-Content $tfsUserPasswordPath | ConvertTo-SecureString

$creds = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $Username,$Password
$tfsServer = New-Object System.Uri("https://myaccount.visualstudio.com")
$tfsCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($tfsServer,$creds)
$tfsCollection.Authenticate()
"***************** Authenticated *****************"

" *VSTS Check Out file* from $fileToUpdate"
Add-TfsPendingChange -Edit -Item $fileToUpdate -Verbose -ErrorAction Stop -wa 0


# read the file, update the number and save it back
$stuff = Get-Content $fileToUpdate
# modify stuff
Set-Content -Value $stuff -Path $fileToUpdate


# *VSTS Check In* Check in the file after changes.
" *VSTS Check In"
New-TfsChangeset -Item $fileToUpdate -Verbose -Comment "***NO_CI***" -Override true -ErrorAction Stop

SecureStrings基于机器/用户帐户,因此当我运行时构建工作正常Powershell ISE作为我的帐户,但不是从构建服务器触发时(它运行为NetworkService目前)。

我尝试过以下这个帖子 https://stackoverflow.com/questions/6911310/how-do-i-run-as-network-service将密码文件创建为“网络服务”并尝试key https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/convertto-securestring?view=powershell-5.1对于安全字符串,但在我的用户和网络服务下无法让任何东西工作。

如何简单地存储独立于运行脚本的用户而工作的凭据?

或者这只是错误的方法,我应该以某种方式使用 PAT?


构建允许您通过构建定义中的设置访问 PAT 令牌。这些是动态生成的 PAT 令牌,因此您无需在任何地方存储任何秘密。

要在开发人员的计算机上运行脚本,您可以要求开发人员输入 PAT 或使用 if else 逻辑,您可以向他询问用户名密码。

更多信息请访问

https://www.visualstudio.com/en-us/docs/build/scripts/#use-the-oauth-token-to-access-the-rest-api https://www.visualstudio.com/en-us/docs/build/scripts/#use-the-oauth-token-to-access-the-rest-api

更新(完整解决方案):

在您的构建中,您必须转到“选项”并打开“允许脚本访问 OAuth 令牌”。

您的最终脚本将如下所示。

Add-PSSnapin Microsoft.TeamFoundation.PowerShell
# This file requires the TFS Power Tools (2015+). When installing, you must select Custom Installation and select PowerShell Cmdlets

# *VSTS Login*
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=2.0"
Write-Host "URL: $url"
$definition = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Definition = $($definition | ConvertTo-Json -Depth 100)"
"***************** Authenticated *****************"

" *VSTS Check Out file* from $fileToUpdate"
Add-TfsPendingChange -Edit -Item $fileToUpdate -Verbose -ErrorAction Stop -wa 0


# read the file, update the number and save it back
$stuff = Get-Content $fileToUpdate
# modify stuff - make sure you actually make a change!
Set-Content -Value $stuff -Path $fileToUpdate


# *VSTS Check In* Check in the file after changes.
" *VSTS Check In"
New-TfsChangeset -Item $fileToUpdate -Verbose -Comment "***NO_CI***" -Override true -ErrorAction Stop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell / VSTS 构建 - 独立存储凭据/与用户运行脚本无关 的相关文章

  • 使用 WebClient 在 PowerShell 脚本中将 FTP 从二进制更改为 ascii

    简单的 PowerShell 脚本 它可以毫无问题地下载文件 二进制 我需要它的ascii 格式 File c temp ftpfile txt ftp ftp myusername email protected cdn cgi l em
  • PowerShell Get-ChildItem 如何捕获异常

    我目前正在编写一个可视化错误 GUI 它可以在处理时捕获任何异常 并向用户提供 易于理解 的错误消息 但似乎我在使用时无法捕获任何异常Get ChildItemcmdlet 我是否必须使用与 try catch 不同的方法 这是 Power
  • PowerShell 中的 SVN 输出编码

    我正在尝试在 PowerShell 脚本内的字符串中捕获 SVN 日志 在命令行上 输出的编码是正确的 但是当我将其捕获到字符串中时 它就不是正确的 PS C sandbox gt svn log r1804 https myserver
  • 如何在 PowerShell 中处理命令行参数

    处理命令行参数的 最佳 方法是什么 似乎有几个关于 最佳 方法是什么的答案 因此我陷入了如何处理像这样简单的事情上 script ps1 n name d domain AND script ps1 d domain n name 有没有一
  • PowerShell-V5 Invoke-Webrequest 添加 2 个标头授权标头和接受接受标头

    我正在尝试创建一个脚本 该脚本将使用 powershell 和 invoke webrequest 自动升级 NSX 以利用 NSX Manager 的 API 调用 我已经完成了脚本 但脚本的某些部分我需要检查并匹配响应中的某些数据 事实
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务
  • 在 TFS 下的 CI 队列上构建时包未恢复(VS Online VS2015)

    我问过一个关于构建错误的问题 https stackoverflow com questions 34808954 build errors of missing packages in visual studio online并继续由我绝
  • Powershell,从txt文件读取并格式化数据(删除行,删除之间的空格)

    我对 powershell 真的很陌生 我想使用powershell读取txt文件并将其更改为其他格式 从 txt 文件中读取 设置数据格式 删除行 删除之间的空格 记录计数 T 000000002 9 个字符 然后将输出写入新文件 我两天
  • Winform 启动后隐藏或最小化 powershell 提示符

    我编写了一个简单的 powershell 脚本来启动 winform 在 powershell 脚本中编写的 Winform 代码 例如 showContent ps1 文件 并显示一些内容 我需要在Winform启动后隐藏powershe
  • Foreach-object Parallel 块内的错误处理 - Powershell 7

    在下面的 Foreach Object Parallel 块中捕获错误的最佳方法是什么 因为将有三个单独的线程 运行空间运行并执行块中写入的代码 并且可能同时发生多个错误 异常 是否可以捕获列表 变量中的所有错误并在脚本执行结束时显示 1
  • 从 TFS 下载工作项附件(文件已损坏)

    我正在尝试创建 C 代码 因此我可以自动从 Team Foundation Server 下载 BUGS 预定义查询的所有附件 该代码似乎工作得很好 但所有下载的文件都因意外原因而损坏 我无法查看它们 有人可以看一下代码并分享意见吗 非常感
  • 在 PowerShell 中,如何组合具有一对一关系的两个命令的结果?

    此特定示例是 Get User 和 Get Mailbox Exchange 2010 Get User 返回一些我需要的列 Get Mailbox 返回一些其他列 我很难弄清楚如何将两者的结果合并到一个表中 并包含两者的结果 Get Us
  • PowerShell:使用 Invoke-Expression 管理错误

    我尝试弄清楚如何确定使用 Invoke Expression 的命令抛出是否失败 即使变量 LASTEXITCODE 或 ErrorVariable 也对我没有帮助 例如 PS C gt cmd cat c xxx txt 使用 Invok
  • 使用 Powershell 添加 IIS 8.5 自定义日志记录字段

    带有 IIS 8 5 的 Windows Server 2012 R2 允许使用增强型日志记录自定义日志字段 http www iis net learn get started whats new in iis 85 enhanced l
  • 我们是否错误地使用了 TFS 2010? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们的团队是 TFS2010 的新手 从历史上看 我们一直使用我们自己的业务需求矩阵 可追溯性矩阵 Excel 电子表格 它具有典型的列 例如
  • PowerShell 解锁/卸载导入的 CSV

    早晨 我想问题就在标题里 我有一个脚本 它通过导入 CSV 的文件夹结构运行 与每个脚本一起工作 然后在完成后尝试删除它们 遗憾的是 其中很多都锁定在 PowerShell 上 而我删除它们的唯一方法就是关闭 PS 有什么方法可以卸载csv
  • 我可以在 Emacs 的 shell 模式下使用 PowerShell 吗?

    我可以在 emacs 的 shell 模式下使用 powershell 作为 shell 吗 How 请参阅 Jeffrey Snover 的博客文章在 Emacs 内运行的 PowerShell http blogs msdn com p
  • 隐藏powershell输出

    我有以下脚本 param 参数 强制 true 字符串 dest New Item force path dest 1 itemtype directory New Item force path dest 2 itemtype direc
  • Powershell 中的反斜杠

    为什么 split 参数的字符串需要两个反斜杠 而 join 参数的字符串只需要一个反斜杠 反引号是 Powershell 中的转义字符 字符前面的反斜杠有什么作用 path C folder test unit1 testing resu
  • 使用 TFS REST API 获取迭代中的所有工作项

    我正在尝试获取有关当前冲刺中所有用户故事的一些信息 我可以轻松获取当前冲刺的路径 并且给定工作项的 ID 列表 我可以从其中获取所需的内容 但我不确定如何从迭代路径获取这些 ID 我见过使用 C 和查询的示例 但我使用的是 javascri

随机推荐

  • 如何向 cats-effect 的资源添加正确的错误处理

    我正在尝试使用纯功能性方式获取一些基本文件 IO 写 读 猫效应 https typelevel org cats effect 关注后this https typelevel org cats effect tutorial tutori
  • SNS 到 Lambda 与 SNS 到 SQS 到 Lambda

    如果有人可以帮助解释 我想了解我的工作流程中是否需要 SQS 在我的应用程序中 当采取操作时 它会将信息提交到 SNS 主题 该主题调用 Lambda 进行一些处理 这效果很好 当我在线研究时 似乎人们也在这个堆栈中使用 SQS 其中 SN
  • 来自 csv 文件的 Unicode 表情符号在 python 中

    我有一些用户推文的 csv 数据 在excel中显示如下 It felt like they were my friends and I was living the story with them retired IAN1 我已将此 cs
  • 在 WebSphere Application Server 7.0 上设置 URL 资源?

    我需要在 WebSphere 中设置 URL 资源 如下所示this http www ibm com developerworks websphere library techarticles 0502 botzum 0502 botzu
  • 使用nodejs Dynamodb 创建表?

    我想创建一个表 并想使用 Dynamodb NodeJs 创建 6 7 列 属性 我已经创建了一个表 但无法添加超过 2 个属性 我是这个平台的新手 任何人都可以帮助我在一个表中创建多个属性 在 DynamoDB 上 您必须仅定义Hash
  • DataGridView 完整显示单元格内容

    我正在用数据填充 datagridview 并且数据在每个单元格中并不完全可见 如何显示所有包含 Enter 键的内容 这将完整地显示单元格内容 DataGridView1 AutoSizeRowsMode DataGridViewAuto
  • PHP:加密/解密短字符串

    我需要加密和解密短字符串 例如 product1234 我已将 mcrypt encrypt 和 mcrypt decrypt 与各种密码一起使用 问题在于 它总是将扩展字符放入结果字符串中 这会导致我无法控制的应用程序代码的某些方面出现一
  • Xcode 警告:不可变属性不会被解码,因为它是用无法覆盖的初始值声明的

    运行 Xcode 12 我的 Swift 5 Xcode 项目现在每当Decodable or Codable类型声明一个let具有初始值的常数 struct ExampleItem Decodable let number Int 42
  • 设置混合模式来绘制笔划?

    我查了一下 认为我的问题的答案是 否 但这里是 使用 Javascript 和 canvas 标签 我可以用以下命令绘制漂亮的 alpha 混合线stroke 这很有趣 但我想通过设置笔画的混合模式来更进一步 例如 看起来它正在使用经典的
  • 如何使用 Spring Sleuth 记录 MDC?

    我有一个基于 Spring boot sleuth 的应用程序 一切都按预期进行 我现在有这样的日志 2017 05 04 17 55 52 226 INFO alert 692d0eeca479e216 c3c8b680dc29ad02
  • 在 asp.net mvc 中以编程方式中止 OutputCache 持续时间

    我使用 OutputCache 属性在服务器端缓存操作的 html 输出 很好 它有效 但现在我遇到的情况是内容很少发生变化 但当发生变化时 用户在下一个请求时看到新数据至关重要 那么 有没有办法以编程方式中止页面缓存持续时间 是的 可以使
  • 为什么上标数字的 Unicode 字符显示高度不一样?

    为什么 Unicode 数字上标的显示高度不一样 如果您用上标数字组成两位数 这一点尤其明显 其中一些看起来不错 但其余的看起来彼此格格不入 我错过了什么吗 或者事实就是如此 Like jrturton https stackoverflo
  • 可编程地通过扬声器发出和播放声音 C++

    我正在用本机 vc 不是 Net 制作游戏 我正在寻找一种通过真正的扬声器 不是内部扬声器 播放噪音 可能是 8 位或其他 的方法 我了解 PlaySound 但我不想让我的 EXE 变大 我想对声音进行编程 是否有一种 api 方式 有点
  • PHPExcel:如何设置单元格的日期格式

    我需要将日期保存到 Excel 文件 它必须以 dd mm yyyy 格式 或用户的本地日期格式 输出 并被视为日期 以便其中的一列可以正确排序 这是代码
  • 如何捕获另一个进程的未处理异常?

    我想修改或仅加载 NET 可执行文件 然后处理其未处理的异常 我的目标是制作一个可以发送堆栈跟踪的智能处理程序 假设另一个可执行文件是 NET 应用程序 将其加载到新的AppDomain http msdn microsoft com en
  • Selenium 2.50 不适用于 Firefox 45

    我在使用 Firefox 和 webdriver 时遇到错误 45000 毫秒后无法通过端口 7055 连接到主机 127 0 0 1 火狐版本 45 0 硒 2 50 1 Windows 10 64 位 有没有人遇到类似的问题或知道解决方
  • 实施的标签系统中的错误

    我按照 Hartl 的教程制作了一个带有标记系统的 ToDoList 也借助了这个单词指南 https medium com sherzelsmith add a filtering multiple tag system with aut
  • C# - SSL 与 Websphere MQ 版本 7.0.1

    使用 C 连接到启用 SSL 的队列管理器时 需要设置哪些值才能使队列正常工作 我目前收到此错误 原因代码 2393 MQRC SSL INITIALIZATION ERROR 在我的代码中 我设置 MQEnvironment SSLKey
  • 结帐页面上的返回购物车按钮

    有什么解决方案可以显示 返回购物车 WooCommerce 结帐页面上的按钮 实际上只有一个完整的订单按钮 但是如果用户想要更正他的订单 我们需要一个后退按钮 Thanks 是的 可以在结帐页面上使用 返回购物车 按钮显示自定义通知 这是自
  • Powershell / VSTS 构建 - 独立存储凭据/与用户运行脚本无关

    我正在尝试为构建创建一个脚本 用于签出文件 编辑文件并将其重新签入 我希望它在作为开发人员或构建代理运行时能够工作 我有一个类似的解决方案this https stackoverflow com a 25455769 852806 密码存储