如何在具有管理员权限的 Windows 任务计划程序中设置 Powershell 脚本?
Posted
技术标签:
【中文标题】如何在具有管理员权限的 Windows 任务计划程序中设置 Powershell 脚本?【英文标题】:How to setup a Powershell Script in Windows Task Scheduler with admin permissions? 【发布时间】:2020-09-26 10:59:33 【问题描述】:我正在运行以下 PowerShell 脚本,该脚本创建 Tableau 备份并使用 Windows 任务计划程序将其上传到 Google Cloud Storage。
#Tableau Server backup
&$tsm maintenance backup -f $Backups_file -d -u $User -p $Password
CD "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin"
$backups_folder = "D:\Tableau Server\data\tabsvc\files\backups\" #default backup path for Tableau installation #&$tsm configuration get -k basefilepath.backuprestore
$filename = get-childitem -path $backups_folder -Filter "*.tsbak" | where-object -not $_.PSIsContainer | sort-object -Property $_.CreationTime | select-object -last 1
$fullpath = Join-Path $backups_folder $filename
gsutil cp $fullpath gs://my_bucket/backups #upload the latest backup to GCP
我使用命令:
powershell -Command "start-process -verb runAs "powershell " -argumentlist "E:\Tableau\test.ps1""
提示以下消息:
运行脚本,创建备份并成功上传到 GCS。
现在我需要使用 Windows 任务计划程序自动化这个脚本,我做了如下操作:
Program/script: powershell
Add arguments (optional): -Command "start-process -verb runAs "powershell " -argumentlist "E:\Tableau\test.ps1""
我将任务设置为由用户 SYSTEM 以最高权限运行:
在这种情况下,什么都不会发生。
我尝试了另一个创建备份但没有上传到 GCS 的命令。当我使用命令powershell -executionpolicy bypass -file 'E:\Tableau\Tableau Backup\test.ps1
在 CMD 上手动运行它时,我收到以下错误:
PS D:\Tableau Server\data\tabsvc\files\backups> powershell -executionpolicy bypass -file 'E:\Tableau\Tableau Backup\test
.ps1'
CommandException: Error opening file "file://D:\Tableau Server\data\tabsvc\files\backups\TableauBackup-2020-06-06.tsbak"
: [Errno 13] Permission denied: u'D:\\Tableau Server\\data\\tabsvc\\files\\backups\\TableauBackup-2020-06-06.tsbak'.
很明显,使用 gsutil 命令时出现权限错误。当我以管理员身份手动启动我的 cmd 时,该命令运行顺利。
当从非管理员提升的 CMD 触发时,最后一个命令可以顺利运行,但在 Windows 任务计划程序中设置时将无法运行:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -Command "start-process -verb runAs "powershell " -argumentlist "E:\Tableau\test.ps1""
我还尝试了this,它在任务计划程序上不起作用,在运行到 CMD 时会手动运行,但也会失败,因为权限被拒绝,就像我列出的上一个命令一样:
powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File "E:\Tableau\test.ps1"
如何正确设置 myWindows 任务计划程序以成功运行此脚本?
【问题讨论】:
任务调度程序通常接受带有start a program
的cmd
代码,因此请尝试将program/script
部分设为powershell(有一个名为powershell 的cmd 命令),参数设为-file Pathtoscript.ps1
,其余部分不应该需要争论。将命令放在 Add arguments 部分中很重要,或者就像您在问题中尝试的那样,它不会起作用。
【参考方案1】:
这最终对我有用。
Program/script: powershell
Add arguments (optional): -ExecutionPolicy Bypass -command "E:\Tableau\test.ps1 2>&1 > E:\Tableau\test_output.txt"
或在单个命令中从管理员提升的 CMD 运行:
powershell -ExecutionPolicy Bypass -command "E:\Tableau\test.ps1 2>&1 > E:\Tableau\test_output.txt"
真正的问题是我在 Google Cloud VM 上运行它,我需要更改 VM 的范围才能访问所有 API。
在我这样做之后,我能够成功运行脚本。
【讨论】:
【参考方案2】:我也无法启动脚本,经过大量搜索后没有任何帮助。没有 -ExecutionPolicy,没有命令,没有文件,“”和“”之间没有区别。
我只是将我在 powershell 中运行的命令放在参数选项卡中:./scripts.ps1 parameter1 11 parameter2 xx 等等。现在调度程序工作。 程序:Powershell.exe 开始于:C:/location/of/script/
【讨论】:
以上是关于如何在具有管理员权限的 Windows 任务计划程序中设置 Powershell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章