Powershell 使用任务计划程序脚本指定位置

Powershell 使用任务计划程序脚本指定位置,powershell,scheduled-tasks,Powershell,Scheduled Tasks,我正在尝试编写一个PowerShell脚本,它将每天激活另一个脚本。我得到的是: $Sta = New-ScheduledTaskAction -Execute "powershell.exe" -argument "C:\Users\UserName\Desktop\Script.ps1" $Stt = New-ScheduledTaskTrigger -Daily -At 3am Register-ScheduledTask Task1 -Action

我正在尝试编写一个PowerShell脚本,它将每天激活另一个脚本。我得到的是:

$Sta = New-ScheduledTaskAction -Execute "powershell.exe" -argument "C:\Users\UserName\Desktop\Script.ps1"
$Stt = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask Task1 -Action $Sta -Trigger $Stt
它无法工作,因为它找不到文件。PowerShell的默认目录是用户的根目录,因此我不知道这是否是它,即使我尝试使用文件的完整路径?或者是由于计划任务从何处运行?位置显示\我似乎无法更改,即使在任务计划程序应用程序中也是如此。我已经在谷歌上搜索了好几天,但我想不出来。有人知道吗?我正在使用Windows 10 Pro。

Soufflegirl13

更新和测试:

$TaskSet = New-ScheduledTaskSettingsSet -Compatibility Win8
$TaskSet.DisallowStartIfOnBatteries = $True
$TaskSet.StopIfGoingOnBatteries     = $True
$TaskSet.IdleSettings.StopOnIdleEnd = $false
#Adjust the following two lines to meet your requirements
$TaskDesc = "Retrieve the status of HyperV" 
$TaskName = "Task1 - or whatever you want here"

$Stt = New-ScheduledTaskTrigger -Daily -At 3am

#Adjust the -file parameter to point to your script
$TAArgs = @{Execute  = '"' + "c:\windows\system32\windowspowershell" +
                             "\v1.0\powershell.exe" + '"' ;
            Argument = "-file `"G:\BEKDocs\Scripts\Misc\Get-HyperVStatus-V-3.ps1`""                  }
                             
$TaskAction = New-ScheduledTaskAction @TAArgs

$RSTArgs = @{Action      = $TaskAction
             TaskName    = "$TaskName"
             Trigger     = $Stt
             User        = "$env:USERDOMAIN\$env:username"
             RunLevel    = "Highest"
             Description = "$TaskDesc"
             Settings    = $TaskSet}

Register-ScheduledTask @RSTargs
我发现在powershell文件规范中强制使用引号解决了一些问题。如果前一个脚本名不起作用,您可能希望尝试在脚本名周围使用它

当然,可以根据需要调整任何设置。此外,我以前没有使用此基本代码来设置触发器,但我根据Register ScheduledTask的文档对其进行了调整,使其能够正常工作

更新说明:

我检查了新ScheduledTaskSettingsSet cmdlet的文档,但它没有将Win10作为兼容的有效值,所以我将其备份到Win8。您也可以不使用Compatibility参数并接受它的默认值

代码现在已经完全测试过了,很抱歉,我忘了告诉您用值替换$TaskName变量或添加变量,如调整后的代码所示


HTH

第9行给了我一个解析器错误,我不明白为什么…@soufflegir13将逗号改为分号
在第9行:
“\v1.0\powershell.exe”+”;
@Theo,很好的捕获!谢谢!我试过了,但现在它给了我一系列错误。“在这个对象上找不到属性'disallowsArtifonBatteries''stopifGoingAtteries'stoponidlend'。验证属性是否存在并且可以设置。“和”REgister ScheduledTask@RSTargs无法验证参数“Settings”上的参数。参数为null或为空。请提供一个不为null或空的参数,然后重试该命令。“soufflegirl13,然后只需从脚本顶部删除这些行。您似乎是以无法访问
C:\Users\UserName\Desktop
路径的用户身份运行任务。可能是因为这是一个没有桌面路径的服务帐户。最好将脚本文件直接存储到C:\驱动器上,或者为计划任务脚本创建一个专用子文件夹,并确保运行该任务的用户对该文件夹具有读取/执行权限。我还将参数字符串更改为
“-文件'C:\ScriptFolder\Script.ps1'
,这不是它,因为我以管理员的身份运行它,它位于管理员的桌面上。我试过你的建议,但没有改变。