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

Cha*_*ell 5 powershell credentials octopus-deploy

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

在脚本内部,除了一些存档位之外,我几乎能够做我需要的一切.存档需要在不同的域凭据下完成,因为它位于网络共享上.

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

-------------------------------------------------- - [Backup Nupkg] -------------------------------------------- --------为开发环境存储GeoSphere.1.2.1.1722.nupkg的备份版本
错误09:24:32 [localhost]启动
后台进程时出错.错误错误09:24:32报告:访问被
拒绝.错误09:24:32在
C:\ Octopus\Deployments\Development\GeoSphere\1.2.1.1722\deploy.ps1:121
错误09:24:32 char: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 Name:
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
Tentacle version 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
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

让它成为触手可及的魔术是什么?

Pau*_*ell 6

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

使用Powershell作为特定用户运行脚本块

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