首页 > 解决方案 > Powershell作为导入模块的计划任务问题,似乎

问题描述

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

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

我观察到的是,如果我以相关用户身份打开 powershell(以不同用户身份运行 > 以服务帐户身份验证),则打开该 powershell 实例将允许计划任务按预期运行。但是,如果我关闭 powershell 实例,计划任务将失败。这显然是不可行的,因为目标是让该脚本按计划运行,而无需在运行 powershell 脚本时将服务帐户(或任何帐户)登录到 Windows 服务器。

标签: powershellscheduled-taskspowercli

解决方案


您遇到的问题是环境变量。在以用户身份运行与以机器身份运行的过程中,PSModulePath环境变量更改为包含用户范围模块安装的用户目录。您应该在PowerCLI机器范围内安装。

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

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

第一种选择的示例:

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'

推荐阅读