9

我正在服务器上使用 powershell,并希望使用它来停止和启动任务调度程序中的任务。我运行此命令“Import-Module TaskScheduler”,但出现错误:

Import-Module : The specified module 'TaskScheduler' was not loaded because no valid module file was found in any module directory.

对这个问题有任何想法吗?

4

2 回答 2

8

最可能的情况是您将模块安装到个人位置,而不是系统位置。如果您在计划任务中运行它,或者为特定用户安装它(并且以其他人身份运行),那么您需要确保该模块位于“正确”位置。

   $env:PSModulePath 

将显示当前模块路径。应该至少有 2 个。一个将在您的用户目录中,另一个将在 $pshome\Modules 中。

如果你想偷懒,你可以在那里放一个模块。如果您想彻底,您可以创建一个新目录,更改 PSModulePath(在 PowerShell 之外,因此它从一个 PowerShell 实例粘到下一个)以包含此目录。这是“官方”的方式。

就个人而言,由于您可能使用的是我在 PowerShellPack 中编写的非常旧的 TaskScheduler 模块,很抱歉我的安装程序将它们放入用户目录,而不是全局目录。虽然用户目录是常见的情况,但全局目录应该是一种选择。

于 2013-06-14T21:12:46.913 回答
6

我遇到了同样的问题,我的模块位于正确的位置,并且所有内容都根据预期的约定命名。经过一番挫折后,我发现了问题:我试图导入模块的窗口是在我创建模块之前启动的。当我启动一个新的 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
于 2014-07-31T17:43:50.320 回答