Powershell-为用户从一个脚本到另一个脚本的控制台获取字符串信息



我有两个脚本,一个用作Worker-使用变量完成命令,另一个用作函数LibraryWorker通过变量加载Library并使用其中的函数。

作为一名用户,当我运行脚本时,我希望在控制台中看到输出,我将其定义为Library脚本的结果。

示例Worker脚本:

Param(
[string]$server_01,
[string]$releaseDefinitionName,
[string]$pathRelease,
[string]$buildNumber,
[string]$command_01,
[string]$scheduledTask_01
)
$pathScriptLibrary = $pathRelease + "" + $buildNumber + "" + "_scripts"
. $pathScriptLibrary_library.ps1
$user = xxx
$password = xxx
$cred = xxx
Invoke-Command -ComputerName $server_01 -Credential $cred -ErrorAction Stop -ScriptBlock {powershell $command_01}

脚本示例:

function Stop-ScheduledTasks{
Write-Output [INFO]: Stopping scheduled tasks... -ForegroundColor White
Get-ScheduledTask -TaskName  "$scheduledTask_01" | ForEach {
if ($_.State -eq "Ready") {
Write-Output [WARNING]: Scheduled task $scheduledTask_01 was already stopped. -ForegroundColor Yellow
}
else {
Stop-ScheduledTask -TaskName "$scheduledTask_01"
Write-Output [OK]: Running task $scheduledTask_01 stopped. -ForegroundColor Green
}
}
}
function Start-ScheduledTasks{
Write-Output [INFO]: Starting scheduled tasks... -ForegroundColor White
Get-ScheduledTask -TaskName  "$scheduledTask_01" | ForEach {
if ($_.State -eq "Running") {
Write-Output [WARNING]: Scheduled task $scheduledTask_01 already started. -ForegroundColor Yellow
}
else {
Start-ScheduledTask -TaskName "$scheduledTask_01"
Write-Output [OK]: Stopped scheduled task $scheduledTask_01 started. -ForegroundColor Green
}
}
}

用例:

  1. 用户通过点击Azure DevOps UI中的部署按钮开始部署
  2. 使用Worker脚本的任务从Library中获取功能(在这种情况下,停止Scheduled task(并执行它
  3. 用户检查Azure DevOps端的日志,并查看库脚本中的自定义输出行。(其中2个现在为-1。从[INF]开始,2。以[警告]或[确定]开头(

你能建议一个如何实现这一目标的解决方案吗?非常感谢。

注意:这些示例在Azure DevOps(内部部署(发布管道中运行,运行这些管道的用户可以获得期望的结果。

如果您试图写入azure devops管道日志,则应避免使用Write-Output。这带来了微妙的不同;它会添加到函数的返回值中。

例如,函数Stop ScheduledTask中的写入输出;这大致相当于你把放在函数的末尾

return "[WARNING]: Scheduled task $scheduledTask_01 was already stopped."

可能最终被打印到管道日志中,也可能不会;更重要的是,它可能会完全破坏一个真正试图返回简单值的函数。

我建议使用写主机,而不是使用写输出。这样做可以立即在管道日志中写入一行,而不会影响库函数将返回的内容。

Write-Output "[WARNING]: Scheduled task $scheduledTask_01 was already stopped."

您还可以使用"写入警告"one_answers"写入错误"。

相关内容

最新更新