我正在使用服务器上的powershell,并希望使用它来停止并启动任务计划程序中的任务。我运行此命令“Import-Module TaskScheduler”但收到错误:
Import-Module : The specified module 'TaskScheduler' was not loaded because no valid module file was found in any module directory.
对这个问题有什么想法吗?
答案 0 :(得分:7)
最可能的情况是您已将模块安装到个人位置,而不是系统位置。如果您在计划任务中运行它,或者为特定用户安装它(并且正在以其他人身份运行),那么您需要确保该模块位于“正确”位置。
$env:PSModulePath
将显示当前模块路径。应该至少有2.一个将在您的用户目录中,另一个将在$ pshome \ Modules中。
如果你想要懒惰,可以在那里放一个模块。如果您想要彻底,可以创建一个新目录,更改PSModulePath(在PowerShell之外,以便它从一个PowerShell实例粘到下一个)以包含此目录。这是“官方”的方式。
在个人方面,由于您可能正在使用我在PowerShellPack中编写的非常旧的TaskScheduler模块,我很抱歉我的安装程序将它们放入用户目录,而不是全局目录。虽然用户目录是常见的情况,但全局目录应该是一个选项。
答案 1 :(得分:4)
我有同样的问题,我的模块位于正确的位置,所有内容都按照预期的惯例命名。经过一番挫折之后,我发现了问题:我尝试导入模块的窗口是在创建模块之前启动的。当我启动一个新的Powershell实例时,它已加载。所以希望这可能会帮助那些遇到同样问题并且无法弄清楚原因的人。
您还可以将Powershell模块的位置添加到模块路径:
$env:PSModulePath=$env:PSModulePath + ";" + "F:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules"
或者您可以向现有脚本添加逻辑:
$module_path = $env:PSModulePath
if (-not($module_path -match "F:\\Program Files (x86)\\Microsoft SQL Server\\110\\Tools\\PowerShell\\Modules")) {
if (Test-Path("F:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules")) {
$env:PSModulePath=$env:PSModulePath + ";" + "F:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules"
}
else {
write-host "sqlps not in default location - this can cause errors" -foregroundcolor yellow
}
}
import-module "sqlps" -DisableNameChecking