背景/目标
我正在尝试创建一个计划任务,它将:
- 在指定时间运行(一次)
- 运行 PowerShell 脚本:
- 将所有输出记录为记录稿
- 使用加密的存储凭证连接到我的 vCenter 服务器
- 关闭特定文件夹中所有虚拟机的客户操作系统
问题
该脚本从控制台完美执行但甚至没有开始作为任务执行。
代码
#Stop an error from occurring when a transcript is already stopped
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
#Reset the error level before starting the transcript
$ErrorActionPreference="Continue"
Start-Transcript -path C:\temp\Shutdown_NonProductionVMs.log -append
#Add the VMWare Snap-in
Add-PSSnapin -Name VMWare.VimAutomation.Core
#Get the Credentials
$creds = Get-VICredentialStoreItem -file C:\temp\pscreds.creds
#Connect to the server using the credentials file
Connect-VIServer -Server $creds.host -User $creds.User -Password $creds.Password
#Get all VMs within the non-production VMs folder and then shut them down
#NOTE the -WhatIf tag, which will stop it from shutting down the VMs until we're sure the script is good.
Get-Folder -Name "03. Non-Production VMs" | Get-VM | Shutdown-VMGuest -WhatIf
#Clean Up
Disconnect-VIServer -Force -Confirm:$false
Remove-PSSnapin -Name VMWare.VimAutomation.Core
Stop-Transcript
到目前为止我已经检查/尝试过的内容以及其他线索
- 再次,当以管理员身份打开控制台时,此脚本可以在控制台中完美运行。
- 我已经设置了“不受限制”的机器级执行策略,看看是否有帮助。
- 我以创建凭证文件时使用的同一用户身份运行该任务
- 我正在以最高权限运行该任务。
- 我正在使用存储的凭据(我的用户凭据 - 与控制台上使用的凭据相同)运行该任务。
- 我尝试注释掉与成绩单相关的代码,看看是否能起到作用;但没有成功。
- 任务只是继续永久运行。我没有得到任何结果,它也没有终止。
有什么想法吗?提前感谢您提供的任何帮助!
答案1
如果您在交互式“控制台”会话中启动 Powershell,则您很可能会启动 64 位版本的 Powershell。(可执行文件将驻留在 Windows\System32 中。)您还可以通过执行驻留在 Windows\SysWOW64 中的版本从 64 位 Windows 启动 32 位 Powershell。确保您知道任务计划程序正在启动哪个版本。
请记住,每个版本的 Powershell 都有完全独立的执行策略。因此,您需要设置两次执行策略,以覆盖 32 位和 64 位版本的 Powershell。
您尝试加载的管理单元也可能很关键。某些管理单元和 COM 对象只能在 32 位或 64 位环境中加载。但是,我刚刚在安装了 PowerCLI 的 Server 2008 R2 服务器上进行了测试,在两种环境中加载您引用的管理单元都没有问题。所以我认为这不是问题所在。但这仍然是需要考虑的问题。它可能取决于您安装的 PowerCLI 版本。确保管理单元从 32 位和 64 位 PS shell 加载。
最后,您能告诉我们计划任务中的操作屏幕具体说了什么吗?您正在运行什么命令行(带参数)?如果您运行类似下面的命令,您可能会获得更多调试信息cmd /c powershell.exe c:\yourscript.ps1 2>&1> C:\debug.txt
Get-ExecutionPolicy -List
它也可能会帮助我们提供来自 32 位和 64 位环境的输出。
您还在帖子中提到:
任务只是继续永久运行。我没有得到任何结果,它也没有终止。
这通常表示它正在等待用户输入。
编辑:错别字,到处都是错别字