首页 > 解决方案 > 无法创建 2 个机器环境变量并通过计划任务执行另一个命令

问题描述

我想创建 2 个“机器”环境变量,并通过单个计划任务执行命令。计划任务应立即运行并自行删除。计划任务应以当前登录的桌面用户身份执行。

以下是我需要执行的 3 项:

[Environment]::SetEnvironmentVariable('AppA', (Get-StartApps -Name 'PowerShell (Tools1)').AppID, 'Machine')
[Environment]::SetEnvironmentVariable('AppB', (Get-StartApps -Name 'PowerShell (Tools2)').AppID, 'Machine')
Export-StartLayout -path 'C:\temp\Orig.xml'

注意: 我不想依赖外部脚本;这就是为什么我有这么长的代码行$action

当我运行下面的代码时,几乎总是没有执行任何命令。很少会创建单个环境变量。如果不可能在单个任务中可靠地做到这一点,我希望有人能告诉我如何在 3 个单独的任务中可靠地做到这一点。似乎即使我做了 3 个单独的任务,结果仍然不一致/不可靠。

代码:

$AppA = (Get-StartApps -Name 'Windows PowerShell ISE (x86)').AppID
$AppB = (Get-StartApps -Name 'Outlook').AppID
$action = New-ScheduledTaskAction -Execute "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-noprofile -windowstyle hidden -command ( [Environment]::SetEnvironmentVariable('AppA', $AppA, 'Machine') ; [Environment]::SetEnvironmentVariable('AppB', $AppB, 'Machine') ; Export-StartLayout -path 'C:\temp\Orig.xml' )"
$trigger = New-ScheduledTaskTrigger -Once -At (get-date).AddSeconds(4); $trigger.EndBoundary = (get-date).AddSeconds(8).ToString('s')
$principal = New-ScheduledTaskPrincipal -UserId (Get-WmiObject -Class win32_computersystem).UserName -LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -DeleteExpiredTaskAfter 00:00:12
Register-ScheduledTask -TaskName "2 envvars and Export-StartLayout" -Action $action -Trigger $trigger -Principal $principal -Settings $settings

标签: powershellpowershell-3.0powershell-4.0windows-task-scheduler

解决方案


推荐阅读