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 服务。
然后我执行了以下步骤:
- 生成了新的 SSH 密钥
- 已将 SSH 密钥添加到代理
- 将密钥添加到 GitHub
- 验证 SSH 是否正常运行 - ssh git@github.mycompany.com
脚本 运行 作为计划任务没有问题。
这是我在重启后找到持久性的唯一方法。
我们为自动报告脚本设置了 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 服务。
然后我执行了以下步骤:
- 生成了新的 SSH 密钥
- 已将 SSH 密钥添加到代理
- 将密钥添加到 GitHub
- 验证 SSH 是否正常运行 - ssh git@github.mycompany.com
脚本 运行 作为计划任务没有问题。
这是我在重启后找到持久性的唯一方法。