PowerShell git 作为计划任务推送

PowerShell git push as a scheduled task

我们为自动报告脚本设置了 Win Server 2016,以便在作为计划任务执行时将报告推送到 github。

当我以代理用户身份登录时,我可以 运行 这个脚本没有问题。我已经启动了 sshagent,现在 运行ning。当 运行 作为计划任务时,脚本在脚本的第二部分(git 推送)终止。

我已经尝试 运行将 git-push 部分单独作为计划任务,但我仍然无法将其发送到 运行(ssh 代理仍然 运行宁)。我可以 运行 在 git-bash 中也没有问题。

#git checkout the most recent vCenter list.
cd D:\virtualization-reporting
git checkout vcenters.csv
cd D:\scripts

#list of vCenters to be queried
$vcenters = import-csv D:\virtualization-reporting\vcenters.csv

#connect to vCenters, get templates, export to csv.
foreach ($vc in $vcenters){
    $creds = Get-VICredentialStoreItem -host $vc.vcenter -file D:\scripts\creds.xml -ErrorAction Ignore
    Connect-VIServer -Server $creds.host -User $creds.User -Password $creds.Password
    foreach($dc in Get-Datacenter){
        foreach($cluster in Get-Cluster -Location $dc){
            Get-Template |
            Select Name,
            @{N='vCenter';e={$vc}},
            @{N='Cluster';E={$cluster.Name}},
            @{N='Path';e={$_.extensiondata.config.files.VmPathName}}|
            sort Name,vCenter,Cluster,Path|
            export-csv -append -path D:\virtualization-reporting\Template_Distribution_Report\Template_status-$((Get-Date).ToString('MM-dd-yyyy')).csv -NoTypeInformation
        }
    }

    #disconnects from each vCenter after gathering data and appeneding to csv
    disconnect-viserver * -confirm:$false
}

#change directory to the repo path on the POSH host.
cd D:\virtualization-reporting

#git merge output with GitHub 
$date = (get-date)
git checkout master
git pull
git add -A
git commit -m "Updated Template Distribution Report for $date"
git push

#exit PowerShell Session
Exit-PSSession

如果我不能在 PowerShell 中得到这个 运行ning,我很乐意在 POSH 或 git [=22] 中有一个 运行s 的计划任务=] 将执行 git 推送。

谢谢。

I've started the sshagent and it's running.

仅当您使用 SSH URL.

时才相关

The script dies in the 2nd part of the script (git push) when run as a scheduled task.

可能是因为它是 运行 一个不同的帐户(如系统帐户)并且 VICredentialStoreItem 不会获得与从命令行执行时相同的凭据(作为正确的用户)
这些凭据将仅适用于远程 HTTPS URL。不是 SSH (git@...)

首先,我是 运行 我通过检查来源验证的 ssh URL。

最终,我确定脚本在脚本的 git 部分失败。虽然我尝试以各种方式启动代理并向代理添加密钥,但它仍然死机了。我发现以下方法始终有效(即使在重新启动后)。

我安装了从 https://github.com/PowerShell/Win32-OpenSSH/releases 下载的 OpenSSH,解压到 a 文件夹,然后 运行 脚本:install-sshd。ps1 安装了 2 个 OpenSSH 服务。

然后我执行了以下步骤:

  1. 生成了新的 SSH 密钥
  2. 已将 SSH 密钥添加到代理
  3. 将密钥添加到 GitHub
  4. 验证 SSH 是否正常运行 - ssh git@github.mycompany.com

脚本 运行 作为计划任务没有问题。

这是我在重启后找到持久性的唯一方法。