我正在服务器上使用 powershell,并希望使用它来停止和启动任务调度程序中的任务。我运行此命令“Import-Module TaskScheduler”,但出现错误:
Import-Module : The specified module 'TaskScheduler' was not loaded because no valid module file was found in any module directory.
对这个问题有任何想法吗?
我正在服务器上使用 powershell,并希望使用它来停止和启动任务调度程序中的任务。我运行此命令“Import-Module TaskScheduler”,但出现错误:
Import-Module : The specified module 'TaskScheduler' was not loaded because no valid module file was found in any module directory.
对这个问题有任何想法吗?
最可能的情况是您将模块安装到个人位置,而不是系统位置。如果您在计划任务中运行它,或者为特定用户安装它(并且以其他人身份运行),那么您需要确保该模块位于“正确”位置。
$env:PSModulePath
将显示当前模块路径。应该至少有 2 个。一个将在您的用户目录中,另一个将在 $pshome\Modules 中。
如果你想偷懒,你可以在那里放一个模块。如果您想彻底,您可以创建一个新目录,更改 PSModulePath(在 PowerShell 之外,因此它从一个 PowerShell 实例粘到下一个)以包含此目录。这是“官方”的方式。
就个人而言,由于您可能使用的是我在 PowerShellPack 中编写的非常旧的 TaskScheduler 模块,很抱歉我的安装程序将它们放入用户目录,而不是全局目录。虽然用户目录是常见的情况,但全局目录应该是一种选择。
我遇到了同样的问题,我的模块位于正确的位置,并且所有内容都根据预期的约定命名。经过一番挫折后,我发现了问题:我试图导入模块的窗口是在我创建模块之前启动的。当我启动一个新的 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