2

一連の自己記述モジュール (psm1) を参照する、非常に単純な PS スクリプトがあります。PowerShell ISE からスクリプトを実行すると、モジュールの最新バージョンが実行されないため (ただし、いくつかの古いバージョンのメモリに保存されているため)、髪を引っ張ることがよくあります。

私はgoogle-d、google-dを持っていて、読んで試してみましたが、これらの問題を常に回避するのではなく、一体何が起こっているのかを理解したいと思う時が来ました.

いくつかのサンプルコード:

(スクリプトは、マシンで機能する PC を構成し、共有を設定し、ローカル ユーザーを作成し、NIC を構成します)

次のように、モジュールの場所をモジュールパスに追加することから始めます。

# Make sure .\Modules is part of the PSModulePath environment variable
$currentPSModulePath = [Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
If (-Not ($currentPSModulePath -Like '*.\Modules*'))
{
    [Environment]::SetEnvironmentVariable("PSModulePath", $currentPSModulePath + ";.\Modules", "Machine")
}
Write-Host ("Environment variable for PSModulePath = {0}" -f [Environment]::GetEnvironmentVariable("PSModulePath", "Machine"))

次に、必要なモジュールをロードします。

### Import Modules
Import-Module -DisableNameChecking ConfigureSystemPC
Import-Module -DisableNameChecking ConfigureChipPC
Import-Module -DisableNameChecking ConfigureEngravePC
Import-Module -DisableNameChecking ConfigureCInkPC
Import-Module -DisableNameChecking ConfigureIPPC
Import-Module -DisableNameChecking ConfigureNPPC

最後に、どの PC を構成する必要があるかをユーザーに尋ねます。

### Start configuring new PC ###

Write-Host "`nChoose the PC type form the options below:`n"
Write-Host "1. System PC"
Write-Host "2. Chip PC"
Write-Host "3. Engrave PC"
Write-Host "4. CInkjet PC"
Write-Host "5. IP PC"
Write-Host "6. NP PC"
Write-Host "7. Output PC"

$pcType = Read-Host "Please enter the PC type and press [enter]"
Write-Host ("You choose option: {0}" -f $pcType)

switch ($pcType)
{
    1 { Configure-SystemPC }
    2 { Configure-ChipPC }
    3 { Configure-EngravePC }
    4 { Configure-CInkPC }
    5 { Configure-IPPC }
    6 { Configure-NPPC }
    7 { Configure-OutputPC }
}

Configure-モジュールで何かを変更すると、問題が発生します。(eg) を追加Write-Host "bla bla"して [保存] ボタンを押し、メイン スクリプト (上記のスクリプト) を再度デバッグすると、PowerShell は古いバージョンのモジュールを実行ます。

次のいずれかでモジュールをリロードしない限り:

  • rmo Configure-EngravePCに続くipmo Configure-EngravePC
  • ipmo Configure-EngravePC -Force

モジュールのまったく同じ「古い」バージョンが実行されます。

これに通常対処する方法を誰が教えてくれますか? そして、なぜ、なぜ、なぜ、デバッガーを介してスクリプトを実行するときに、モジュールをリロードする必要があるのでしょうか? 別のセッションで実行されたモジュールを「保存」するのはなぜですか?? 私は何か間違ったことをしていますか?

事前に多くの感謝を申し上げます。誰かがこれについて詳しく説明してくれることを願っています。

適切な説明(またはこのトピックに関する適切なドキュメントへの参照)を含む回答を強く好みます

4

1 に答える 1