看来,Powershell与导入模块一样是计划任务问题

时间:2018-05-17 13:41:50

标签: powershell scheduled-tasks powercli

我正在尝试为我们的VMware视界环境配置一些powershell / view powercli脚本。我有一个PowerShell脚本,可以正常查询地平线实例并检查机器状态。但是,当我尝试使用服务帐户将其作为计划任务运行时,似乎无法导入模块,因为命令无法识别(“无法将术语'Connect-HVServer'识别为cmdlet的名称,功能,脚本文件或可操作程序。“)

我也试过了个人资料,没关系。

我观察到的是,如果我以相关用户身份打开PowerShell(以不同用户身份运行>作为服务帐户进行身份验证),则将PowerShell实例保持打开状态将允许计划任务按预期运行。但是,如果我关闭powershell实例,则计划任务将失败。这显然是不可行的,因为这个脚本的目标是在PowerShell脚本运行时没有将服务帐户(或任何帐户)登录到Windows服务器的时间表上运行。

1 个答案:

答案 0 :(得分:1)

您遇到的问题是环境变量。在作为用户运行而不是作为计算机运行的过程中,PSModulePath环境变量将更改为包括用户范围的模块安装的用户目录。您应该在机器范围内安装PowerCLI

替代方案(假设您的服务帐户具有管理员权限):

  • 修改脚本中的$Env:PSModulePath以包含每个用户的模块路径
  • 在使用任何cmdlet之前,在脚本中的Import-Module语句中指定路径

第一种选择的例子:

foreach ($user in (Get-ChildItem -Path C:\Users)) {
    $Env:PSModulePath += ";$($user.FullName)\Documents\WindowsPowerShell\Modules"
}

第二个例子:

Import-Module -Name 'C:\Users\KnownUser\Documents\WindowsPowerShell\Modules\PowerCLI'