2013-06-14 24 views
6

Sto lavorando con PowerShell su un server e voglio usarlo per fermare e avviare un'attività nell'utilità di pianificazione. Ho eseguito il comando "Import-Module TaskScheduler", ma ottengo un errore:PowerShell non riesce a importare il modulo

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

Qualsiasi idea del problema?

risposta

7

Il caso più probabile è che il modulo sia stato installato in una posizione personale e non in un percorso di sistema. Se lo stai eseguendo all'interno di un'attività pianificata o se è installato per un determinato utente (e sono in esecuzione come qualcun altro), dovrai assicurarti che il modulo sia nella posizione "giusta".

$env:PSModulePath 

Mostrerà i percorsi del modulo corrente. Ci dovrebbe essere almeno 2. Uno sarà nella tua directory utente, e l'altro sarà in $ pshome \ Modules.

Se si desidera essere pigri, è possibile inserire un modulo lì. Se vuoi essere accurato, puoi creare una nuova directory, cambiare PSModulePath (al di fuori di PowerShell, quindi passa da un'istanza di PowerShell alla successiva) per includere questa directory. Questo è il modo "ufficiale".

In una nota personale, poiché probabilmente stai utilizzando il modulo TaskScheduler molto vecchio che ho scritto nel PowerShellPack, mi dispiace che il mio programma di installazione li abbia inseriti nelle directory degli utenti e non nelle directory globali. Mentre le directory degli utenti sono il caso comune, le directory globali avrebbero dovuto essere un'opzione.

+1

Il modulo non deve essere in una delle directory in '$ env: PSModulePath' (che copre le posizioni personali e di sistema), ma deve essere caricato con il suo percorso completo se non lo è. –

4

Ho avuto lo stesso problema e il mio modulo era nella posizione corretta e tutto è stato denominato in base alla convenzione prevista. Dopo un po 'di frustrazione ho capito il problema: la finestra in cui stavo cercando di importare il modulo è stata lanciata prima di creare il modulo. Quando ho lanciato una nuova istanza di Powershell, è stata caricata. Quindi spero che questo possa aiutare qualcun altro che sta avendo lo stesso problema e non riesce a capire perché.

È inoltre possibile aggiungere la posizione dei moduli PowerShell per il percorso di modulo:

$env:PSModulePath=$env:PSModulePath + ";" + "F:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules" 

Oppure è possibile aggiungere la logica per uno script esistente:

$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 
Problemi correlati