使用Octopus Deploy备用凭据的Powershell工作

时间:2014-11-13 17:53:48

标签: powershell credentials octopus-deploy

我有一个运行部署脚本的Octopus Tentacle。触手作为LocalSystem帐户运行。

在脚本中,除了一些存档位之外,我能够完成我需要的所有操作。存档需要在不同的域凭据下完成,因为它位于网络共享上。

令人沮丧的是,下面的代码在本地工作,但是当触发时,它会因错误而失败

  

----------------------------------------------- ----- [备份Nupkg] ------------------------------------------ -----------存储备份   开发环境的GeoSphere.1.2.1.1722.nupkg版本
  错误09:24:32 [localhost]启动
时出错   后台进程。错误错误09:24:32报告:访问是
  否认。错误09:24:32在
  C:\八达通\部署\开发\几何球体\ 1.2.1.1722 \ deploy.ps1:121
  错误09:24:32字符:1错误09:24:32
  + Receive-Job $ job错误09:24:32
  + ~~~~~~~~~~~~~~~~错误09:24:32
      + CategoryInfo:OpenError:(localhost:String)[],PSRemotingTran错误09:24:32 sportException错误09:24:32
      + FullyQualifiedErrorId:-2147467259,PSSessionStateBroken Info 09:24:32 HasMoreData:False StatusMessage:Location:
  localhost命令:                       Import-Module $ args [3]
                      Backup-Nupkg $ args [0] $ args [1] $ args [2]
                   JobStateInfo:Failed Fished:System.Threading.ManualResetEvent InstanceId:
  0c031592-4c2a-4f8b-b014-a5ba79be09f7 Id:1名称:
  Job1 ChildJobs:{Job2} PSBeginTime:13/11/2014 9:24:30 AM   PSEndTime:13/11/2014 9:24:31 AM PSJobTypeName:BackgroundJob
  输出:{}错误:{}进度:{}详细
  :{}调试:{}警告:{}状态:失败
  致命09:24:32 PowerShell脚本返回一个非零退出代码:1
  触手版2.5.11.614

这是代码

$pwd = convertto-securestring "[PASSWORD]" -asplaintext -force
$cred=new-object -typename System.Management.Automation.PSCredential -argumentlist "[DOMAIN\USER]",$pwd
$packageName = "GeoSphere.$Version.nupkg"
$backupPath = $($es.backupPath)
$artifactsPath = $($es.artifactsPath)
$job = Start-Job -ScriptBlock {
    Import-Module $args[3]
    Backup-Nupkg $args[0] $args[1] $args[2]
} -ArgumentList @($packageName,$backupPath,$artifactsPath,"$currentDir\modules\ApplicationUtilities") -Credential $cred

Wait-Job $Job
Receive-Job $job

这是ApplicationUtilities模块

function Backup-Nupkg{
    param(
        [parameter(Mandatory=$true,position=0)] [string] $packageName,
        [parameter(Mandatory=$true,position=1)] [string] $backupPath,
        [parameter(Mandatory=$true,position=2)] [string] $artifactsPath
    )

    if(!(Test-Path $($backupPath))) {
        md $($backupPath)
    } else {
        Remove-Item "$($backupPath)\*" -recurse -Force
    }

    Copy-Item $artifactsPath\$packageName $backupPath
}

Export-ModuleMember Backup-Nupkg

让这个像Tentacle一样在本地运行的神奇技巧是什么?

1 个答案:

答案 0 :(得分:6)

我尝试了同样的事情没有任何运气,似乎不可能以不同的用户开始工作。在这个类似的问题中,Leblanc最终使用WinRM和Invoke-Command代替:

run script block as a specific user with Powershell

(我认为这不是Octopus特有的 - 这个问题似乎更像是一个问题,SYSTEM能够以不同的用户启动流程,或者在SYSTEM下使用Start-Job,或者两者兼而有之)