Azure Devops 发布 > Powershell 任务 > 构建计划任务
Azure Devops Release > Powershell task > Building a scheduled task
我正在尝试构建一个 Powershell 函数,该函数将在我的 onPrem 服务器上创建一个 Windows 计划任务作为我的 Azure 发布管道的一部分,它需要 运行 使用“运行 用户是否登录”,所以我向它传递了一个 AD 服务帐户用户 ID 和密码。
如果我使用来自变量的纯文本密码,这完全没问题,但我想从我的 Azure KeyVault 导入密码。我将其称为“PasswordFromKeyVault”。
我添加了一个新的变量组,链接到 Keyvault,它正确地检索了值。
这是我在这一步中使用的 Powershell 脚本:
$TaskName = "HelloNewTaskWorld"
$Trigger= New-ScheduledTaskTrigger -At 10:02am -Daily
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PowershellScripts\Somescript.ps1"
$principal = New-ScheduledTaskPrincipal -UserId $(PlainTextUserIdVariable) -LogonType ServiceAccount
$description = "Testing AzureDevOps ability to deploy a fully configured scheduled task"
#As expected, outputs xxx to the console
Write-Host $(PasswordFromKeyVault)
Register-ScheduledTask -TaskName $TaskName -Description $description -Trigger $Trigger -Action $Action -Principal $principal –Force
Set-ScheduledTask -TaskName $TaskName -User $principal.UserID -Password $(PasswordFromKeyVault)
但是当它 运行 时,我收到错误消息“用户名或密码不正确”:
2022-04-11T16:18:23.0724016Z Set-ScheduledTask : The user name or password is incorrect.
2022-04-11T16:18:23.0724884Z At C:\vstsagent\XW14Agent1\_work\_tempf67b9e-e6f7-4f71-9be9-fe24498f535e.ps1:16 char:1
2022-04-11T16:18:23.0725477Z + Set-ScheduledTask -TaskName $TaskName -User $principal.UserID -Passwo ...
2022-04-11T16:18:23.0726111Z + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-04-11T16:18:23.0726638Z + CategoryInfo : AuthenticationError: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Set-Scheduled
2022-04-11T16:18:23.0727110Z Task], CimException
2022-04-11T16:18:23.0727497Z + FullyQualifiedErrorId : HRESULT 0x8007052e,Set-ScheduledTask
我认为这是因为 Azure Keyvault 值已加密且无法解密(这正是我想要的),但有谁知道如何使用已加密的密码创建凭据?
编辑 - 2022 年 4 月 17 日
错误:The user name or password is incorrect
, 可以通过检查并将检索到的密码放在双引号中以获取实际值来解决。
IE;喜欢
"$(PasswordFromKeyVault)"
14/04/2022
请确保在 Azure Key 中设置一个或多个访问策略
Azure DevOps 项目应用程序主体/服务的保险库
对 Secrets 具有 List/Get
权限的帐户,并确保
KeyVault 和 azureSubscription 的名称都是正确的。
可以参考这个blog.
配置Environment Variables,见
stack overflow Reference
秘密变量通常是加密的。所以要将秘密传递给
脚本,我们可以利用
的那些环境部分
脚本任务的输入变量。如果环境变量在
管道是这样的:
Name :password | value :$(mypassword)
现在,尝试用 $env: password
调用你的变量
脚本。
Set-up PS 凭据
$Username = "$env:USERDOMAIN\local-admin"
NOTE: Key Vault name and Secret name should be retrieved via “normal”
variables using inherited environment variable.
for example.
$Secret = (Get-AzKeyVaultSecret -VaultName "myKeyVaultName" -Name "kvTestSecret").SecretValueText
Write-Host "PowerShell Get-AzKeyVaultSecret: $Secret"
References:
- powershell - Not able to print the Azure-Keyvault secret in the release pipeline - Stack Overflow
- Managing Azure Key Vault access and secrets from DevOps pipeline (techgenix.com)
[string]$AdminPassword = Get-AzKeyVaultSecret -VaultName "***" -Name "***" -AsPlainText
//or$ AdminPassword=$env: password
[securestring]$SecureAdminPassword = $AdminPassword | convertto-securestring -AsPlainText -Force
//or $Password = ConvertTo-SecureString "PasswordHere" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $Username, $SecurAdminPassword
//or $cred = New-Object System.Management.Automation.PSCredential($Username,$SecurAdminPassword)
//Then you can Set-up Scheduled Task parameters
勾选this.
参考文献:
我正在尝试构建一个 Powershell 函数,该函数将在我的 onPrem 服务器上创建一个 Windows 计划任务作为我的 Azure 发布管道的一部分,它需要 运行 使用“运行 用户是否登录”,所以我向它传递了一个 AD 服务帐户用户 ID 和密码。
如果我使用来自变量的纯文本密码,这完全没问题,但我想从我的 Azure KeyVault 导入密码。我将其称为“PasswordFromKeyVault”。
我添加了一个新的变量组,链接到 Keyvault,它正确地检索了值。
这是我在这一步中使用的 Powershell 脚本:
$TaskName = "HelloNewTaskWorld"
$Trigger= New-ScheduledTaskTrigger -At 10:02am -Daily
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PowershellScripts\Somescript.ps1"
$principal = New-ScheduledTaskPrincipal -UserId $(PlainTextUserIdVariable) -LogonType ServiceAccount
$description = "Testing AzureDevOps ability to deploy a fully configured scheduled task"
#As expected, outputs xxx to the console
Write-Host $(PasswordFromKeyVault)
Register-ScheduledTask -TaskName $TaskName -Description $description -Trigger $Trigger -Action $Action -Principal $principal –Force
Set-ScheduledTask -TaskName $TaskName -User $principal.UserID -Password $(PasswordFromKeyVault)
但是当它 运行 时,我收到错误消息“用户名或密码不正确”:
2022-04-11T16:18:23.0724016Z Set-ScheduledTask : The user name or password is incorrect.
2022-04-11T16:18:23.0724884Z At C:\vstsagent\XW14Agent1\_work\_tempf67b9e-e6f7-4f71-9be9-fe24498f535e.ps1:16 char:1
2022-04-11T16:18:23.0725477Z + Set-ScheduledTask -TaskName $TaskName -User $principal.UserID -Passwo ...
2022-04-11T16:18:23.0726111Z + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-04-11T16:18:23.0726638Z + CategoryInfo : AuthenticationError: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Set-Scheduled
2022-04-11T16:18:23.0727110Z Task], CimException
2022-04-11T16:18:23.0727497Z + FullyQualifiedErrorId : HRESULT 0x8007052e,Set-ScheduledTask
我认为这是因为 Azure Keyvault 值已加密且无法解密(这正是我想要的),但有谁知道如何使用已加密的密码创建凭据?
编辑 - 2022 年 4 月 17 日
错误:The user name or password is incorrect
, 可以通过检查并将检索到的密码放在双引号中以获取实际值来解决。
IE;喜欢
"$(PasswordFromKeyVault)"
14/04/2022
请确保在 Azure Key 中设置一个或多个访问策略 Azure DevOps 项目应用程序主体/服务的保险库 对 Secrets 具有
List/Get
权限的帐户,并确保 KeyVault 和 azureSubscription 的名称都是正确的。 可以参考这个blog.配置Environment Variables,见 stack overflow Reference
秘密变量通常是加密的。所以要将秘密传递给 脚本,我们可以利用
的那些环境部分 脚本任务的输入变量。如果环境变量在
管道是这样的:Name :password | value :$(mypassword)
现在,尝试用
$env: password
调用你的变量 脚本。
Set-up PS 凭据
$Username = "$env:USERDOMAIN\local-admin"
NOTE: Key Vault name and Secret name should be retrieved via “normal” variables using inherited environment variable.
for example.$Secret = (Get-AzKeyVaultSecret -VaultName "myKeyVaultName" -Name "kvTestSecret").SecretValueText Write-Host "PowerShell Get-AzKeyVaultSecret: $Secret"
References:
- powershell - Not able to print the Azure-Keyvault secret in the release pipeline - Stack Overflow
- Managing Azure Key Vault access and secrets from DevOps pipeline (techgenix.com)
[string]$AdminPassword = Get-AzKeyVaultSecret -VaultName "***" -Name "***" -AsPlainText
//or$ AdminPassword=$env: password
[securestring]$SecureAdminPassword = $AdminPassword | convertto-securestring -AsPlainText -Force
//or $Password = ConvertTo-SecureString "PasswordHere" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $Username, $SecurAdminPassword
//or $cred = New-Object System.Management.Automation.PSCredential($Username,$SecurAdminPassword)
//Then you can Set-up Scheduled Task parameters
勾选this.
参考文献: