powershell - Powershell作为导入模块的计划任务问题,似乎
问题描述
我正在尝试为我们的 VMware Horizon 环境配置一些 powershell/view powercli 脚本。我有一个可以正常工作的 powershell 脚本来查询地平线实例并检查机器状态。但是,当我尝试使用服务帐户将其作为计划任务运行时,它似乎无法导入模块,因为无法识别命令(“术语‘Connect-HVServer’未被识别为 cmdlet 的名称,函数、脚本文件或可运行的程序。”)
我也试过个人资料,没关系。
我观察到的是,如果我以相关用户身份打开 powershell(以不同用户身份运行 > 以服务帐户身份验证),则打开该 powershell 实例将允许计划任务按预期运行。但是,如果我关闭 powershell 实例,计划任务将失败。这显然是不可行的,因为目标是让该脚本按计划运行,而无需在运行 powershell 脚本时将服务帐户(或任何帐户)登录到 Windows 服务器。
解决方案
您遇到的问题是环境变量。在以用户身份运行与以机器身份运行的过程中,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'
推荐阅读
- java - 如何使用共享首选项在 android studio 中保存最喜欢的图像的 imageView?
- c# - 网络检查在 iOS 上不起作用 - Unity
- c# - 更改 SignalR 的 ASP.NET Core 控制台服务器的 IP 地址和端口
- php - 任何工匠命令上的 TypeError
- spotfire - Spotfire 中是否有一个滞后函数可以获取小时列的先前值?
- mysql - 使用“OR”和“HAVING SUM”Mysql 5.7
- github - 如果 GitHub 检查失败,如何停止 GitHub 操作?
- python - 如何检查字符串枚举中是否存在字符串?
- javascript - JS,我们如何从浏览器打开桌面应用程序,例如 Zoom 或 Webex
- node.js - 使用 Nginx proxy_pass 在同一台服务器上托管多个 MEAN 堆栈应用程序