powershell не удается импортировать модуль

Я работаю с powershell на сервере и хочу использовать его для остановки и запуска задачи в планировщике задач. Я запускаю эту команду "Import-Module TaskScheduler", но получаю сообщение об ошибке:

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

какая проблема?

2 ответов


наиболее вероятным случаем является то, что ваш модуль установлен в личное местоположение, а не в системное местоположение. Если вы используете его внутри запланированной задачи или установили для определенного пользователя (и работаете как кто-то другой), вам нужно убедиться, что модуль находится в "правильном" месте.

   $env:PSModulePath 

покажет текущие пути модуля. Должно быть как минимум 2. Один будет в вашем каталоге пользователя, а другой-в $pshome\Modules.

Если вы хотите быть ленивым, вы можете поставить туда модуль. Если вы хотите быть тщательным, вы можете создать новый каталог, изменить PSModulePath (вне PowerShell, поэтому он прилипает от одного экземпляра PowerShell к другому), чтобы включить этот каталог. Это "официальный" способ.

на личной заметке, так как вы, вероятно, используете очень старый модуль TaskScheduler, который я написал в PowerShellPack, мне жаль, что мой установщик отбрасывает их в пользовательские каталоги, а не глобальные справочники. Хотя пользовательские каталоги являются обычным случаем, глобальные каталоги должны были быть опцией.


у меня была та же проблема, и мой модуль был в правильном месте, и все было названо в соответствии с ожидаемым соглашением. После некоторого разочарования я понял проблему: окно, в которое я пытался импортировать модуль, было запущено до того, как я создал модуль. Когда я запустил новый экземпляр Powershell, он загрузился. Поэтому, надеюсь, это может помочь кому-то еще, у кого такая же проблема, и не может понять, почему.

вы также можете добавить местоположение Модули Powershell к пути модуля:

$env:PSModulePath=$env:PSModulePath + ";" + "F:\Program Files (x86)\Microsoft SQL Server0\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 Server0\Tools\PowerShell\Modules")) {
        $env:PSModulePath=$env:PSModulePath + ";" + "F:\Program Files (x86)\Microsoft SQL Server0\Tools\PowerShell\Modules"
    }
    else {
        write-host "sqlps not in default location - this can cause errors" -foregroundcolor yellow
    }
}
import-module "sqlps" -DisableNameChecking