2013-06-14 26 views
6

私はサーバ上でpowershellを使っていて、タスクスケジューラでタスクを停止して起動するために使いたいと思っています。私はこのコマンドを "Import-Module TaskScheduler"を実行しますが、エラーが発生します:powershellがモジュールのインポートに失敗しました

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

問題の考え方はありますか?

答えて

7

あなたのモジュールは、システムの場所ではなく個人用の場所にインストールされている可能性が最も高いです。スケジュールされたタスクの中でそれを実行している場合、または特定のユーザ用にインストールされている場合(他のユーザとして実行中の場合)は、モジュールが正しい場所にあることを確認する必要があります。

$env:PSModulePath 

現在のモジュールパスが表示されます。少なくとも2つあります。ユーザーディレクトリに1つあり、もう1つは$ pshome \ Modulesにあります。

あなたが怠け者になりたい場合は、そこにモジュールを置くことができます。徹底したい場合は、新しいディレクトリを作成し、PSModulePath(PowerShellの外にあり、1つのPowerShellインスタンスから次のPowerShellインスタンスに固執する)を変更して、このディレクトリを含めることができます。これは「公式な」方法です。

PowerShellPackで書いた非常に古いTaskSchedulerモジュールを使用している可能性があるので、私のインストーラはそれらをグローバルディレクトリではなくユーザディレクトリにドロップすることを申し訳なく思っています。ユーザーディレクトリは一般的なケースですが、グローバルディレクトリはオプションであったはずです。

+1

モジュールがある必要はありません。 '$ env:PSModulePath'(パーソナルとシステムの場所を含む)のディレクトリの一つにありますが、そうでなければフルパスでロードする必要があります。 –

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 
関連する問題