メインPowerShellスクリプトから一部の機能を切り離したい場合は、.ps1
ファイルとドットソースを同じに書くか、.psm1
としてインポートしてインポートすることができます。 Import-Module
を使用して同じです。PowerShellインポートモジュールとドットソーシング
どちらが優れているのですか?
メインPowerShellスクリプトから一部の機能を切り離したい場合は、.ps1
ファイルとドットソースを同じに書くか、.psm1
としてインポートしてインポートすることができます。 Import-Module
を使用して同じです。PowerShellインポートモジュールとドットソーシング
どちらが優れているのですか?
Dotsourcing +スクリプトとモジュールは2つの異なるものです。モジュールは、スクリプトで使用する関数とコマンドレットを収集/グループ化するのに最適です。対話的に使用する機能(コンソールで関数を呼び出す)がある場合、モジュールは非常に適しています。
実行する1つの大きなスクリプトがある場合は、「ファイル共有を移行する」とか、タスクスケジューラを使用してregularyと呼ぶ1つのスクリプトを作成し、ドットソーシングが容易になるとします。
これは必要なものによって異なります。要約:
モジュールはライブラリに最適です。モジュールからエクスポートされる内容をより詳細に制御できます。つまり、デフォルトでは、PSM1ファイル内のすべてのスクリプト変数は非公開です。モジュールをインポートするときに、モジュールの外側には表示されません。同様に、すべての機能は公開されています。ただし、PSM1ファイルのExport-ModuleMemberを使用して、モジュールからエクスポートする変数、関数、エイリアス、コマンドレットなどを正確に制御することができます。セッションからモジュールを削除することもできますが、これは.PS1スクリプトのドット区切りと大きな違いがあります。もう1つの違いは、モジュール関数はモジュールが名前空間を持ち、同じ名前のモジュールベースの関数に簡単にアクセスできるため、モジュール名と関数名に "\"を接頭辞として付けることです。 PSCX \ Get-Uptime。 ISEでは、この接頭辞もintellisenseサポートを呼び出します。
一般的にモジュールを使用することをおすすめします。 :-)
モジュール内から.PS1'スクリプトを読み込む( 'dotsourcing')あなたの考えは?これは[Pester's](https://github.com/pester/Pester/blob/master/Pester.psm1)アプローチです。 – craig
それはいいと思います。ドットソーススクリプトはそのモジュールにスコープされます。 –
他の回答に加えて、いくつかのモジュール機能があります。 PowerShellのV3の一
モジュールのエクスポートコマンドを使用するためにImport-Module
を呼び出す必要はありません。対話的にコマンドを使用する場合に特に便利です。 PowerShellは、利用可能なすべてのモジュールコマンドとそれらのヘルプでさえもキャッシュして知っていますGet-Help SomeCommand
(しかし、これはモジュールヘルプGet-Help about_SomeModule
では当てはまりません)。
dot-sourced関数とスクリプトモジュール関数の動作には、いくつかの微妙な違いがあります。 Strange behavior with Powershell scriptblock variable scope and modules, any suggestions? 時には、スクリプトモジュールを使用すると苦痛を感じることがあります。特に、望ましくない差異や問題が発見されたとき、つまり開発の初期段階では単純なものがうまく動作しますが、複雑なものが始まる場合があります。後で間違って行く。
概して、正常に動作しない場合を除いて、通常はモジュールを使用します。そのうちの1つは、スクリプトモジュール関数で渡されたユーザースクリプトブロックを呼び出すことです。
Powershellは、作成したテキストファイルについて、どうすればそれを知り、someModule.psm1という名前を付けることができますか? Powershellは永久に私のファイルシステムをスキャンしますか? –
場合によっては、PowerShellは標準モジュールの場所をスキャンし、新しいモジュールと変更されたモジュールを読み取り、キャッシュします。私が知る限り、詳細は文書化されていません。 –
私が知る限り、Powershellは '$ Env:PSModulePath'で指定されたフォルダ内のファイルのみをチェックします。 ([ここ](https://msdn.microsoft.com/en-us/library/dd878350(v = vs.85).aspxを参照)) –
私はすべての答えが有益で有用であると感じます。私はこの質問の答えとして特定のものをマークすることはできません。だから、私はちょうど彼らのそれぞれのためにupvoteを与えています。それが理にかなってほしい。あなたの提案をありがとう。 – RinoTom
あなたはあなたが1つを持っていると思ったら答えを選んだ方が良いでしょう。 (btw、私のものではなく、ちょうど備考を追加する)。 –