-MaximumVersionを低いバージョンに設定してインポートすると、PowerShellモジュールの新しいバージョンが実行されるのはなぜですか?

マシューマクファーランド

モジュールの1つの古いバージョンに依存するビルドスクリプトがあります。バージョン1.0.1コマンドに追加-MaximumVersion 1.0.1しましたImport-Moduleビルドスクリプトを実行すると失敗し、エラーはモジュールのバージョン2.1.0コードを実行していることを示します。

Import-Module DrilQuip.Build -MaximumVersion 1.0.1 -Force

次のバージョン番号を作成しています...プロパティ 'VersionFilePath'がこのオブジェクトに見つかりません。プロパティが存在することを確認します。C:\ Users \ svcTFSBuildProd \ Documents \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 2.1.0 \ DrilQuip.Build.psm1:253 char:5

-Forceスイッチありとなしで試しましたが、違いはありません。

以前Get-Module DrilQuip.Build -ListAvailable、バージョン1.0.1がコンピューターに存在することを確認していました。

スクリプトが古いバージョンのモジュールをインポートして使用することを保証するにはどうすればよいですか?

アップデート1

-Verbose何が起こっているかについての詳細を取得するためのスイッチが追加されました結果は次のとおりです。

VERBOSE:パス ' C:\ Program Files \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 1.0.1 \ DrilQuip.Build.psd1'からモジュールを読み込んでいますVERBOSE:モジュールDrilQuip.BuildのRepositorySourceLocationプロパティにデータを入力します。

次のバージョン番号を作成しています...プロパティ 'VersionFilePath'がこのオブジェクトに見つかりません。プロパティが存在することを確認します。で、C:\ Users \ユーザーsvcTFSBuildProd \ドキュメント\ WindowsPowerShell \モジュール\ DrilQuip.Build \ 2.1.0 \ DrilQuip.Build.psm1:253文字:5つの+ $マッチ=を選択し、文字列-Pathはグローバル$:BuildConfig.VersionFilePat ...

これは、同じモジュールが2つの異なる場所にインストールされていることを示しています。場所C:\ Users \ svcTFSBuildProd ...は、場所C:\ Program Files \ WindowsPowerShell ...よりも優先されているようです。

これは、モジュールインストールのマシンとユーザーのスコープに関係していると思います。戻ってユーザースコープのモジュールを削除し、マシンスコープのモジュールのすべてのバージョンをインストールして、それが役立つかどうかを確認します。

アップデート2

モジュールのすべてのバージョンをユーザースコープフォルダーから削除してから、スクリプトを再試行しました。それでも失敗しますが、モジュールの両方のバージョンが同じモジュールフォルダーの場所から取得されています。

VERBOSE:パス ' C:\ Program Files \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 1.0.1 \ DrilQuip.Build.psd1'からモジュールを読み込んでいますVERBOSE:モジュールDrilQuip.BuildのRepositorySourceLocationプロパティにデータを入力します。次のバージョン番号を作成しています...プロパティ 'VersionFilePath'がこのオブジェクトに見つかりません。プロパティが存在することを確認します。で、C:\プログラムファイル\ WindowsPowerShell \モジュール\ DrilQuip.Build \ 2.0.4 \ DrilQuip.Build.psm1:251文字:5

新しいバージョンはまだ最大バージョンを上回っているので、ユーザースコープがマシンスコープよりも優先されるという私の理論を要求しましたが、実際の問題ではありません。他に何かが起こっています。

Get-Module -Name DrilQuip.Build -ListAvailableもう一度実行しましたが、ModuleTypeが異なることに気付きました。バージョン1.0.1では、タイプはマニフェストですが、バージョン1.1.1および2.0.4では、タイプはスクリプトです。たぶん、この違いが問題を引き起こしています。

ModuleType Version    Name          
---------- -------    ----          
Script     2.0.4      DrilQuip.Build
Script     1.1.1      DrilQuip.Build
Manifest   1.0.1      DrilQuip.Build

すべてのモジュールを削除し、リポジトリから再インストールします。

マシューマクファーランド

モジュール1.0.1の古いバージョンのタイプはマニフェストで、それ以降のすべてのバージョンはタイプスクリプトです。モジュール1.0.2の次のバージョンもビルドスクリプトと互換性があるため、-MaximumVersionパラメーターを1.0.2に変更しました

これを試す前に、コンピューター上のモジュールのすべてのバージョンをアンインストールしてから、本当に必要なバージョン1.0.22.1.0だけをインストールしましたPowerShellを管理者として実行したため、両方のモジュールがフォルダーにインストールされましたC:\Program Files\WindowsPowerShell\Modules

PS C:\Program Files\WindowsPowerShell\Modules\DrilQuip.Build> get-module DrilQuip.Build -li

    Directory: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     2.1.0      DrilQuip.Build                      {Start-Build, Write-FileCopyResult, Invoke-MSBuild, New-Da...
Script     1.0.2      DrilQuip.Build                      {Get-NextVersion, Set-TfsWorkspaceFileTime}

これらの変更後、ビルドスクリプトは機能し、期待どおりに1.0.2バージョンのコードを使用します。

VERBOSE: Loading module from path 'C:\Program 
Files\WindowsPowerShell\Modules\DrilQuip.Build\1.0.2\DrilQuip.Build.psd1'.
VERBOSE: Populating RepositorySourceLocation property for module 
DrilQuip.Build.
VERBOSE: Loading module from path 'C:\Program 
Files\WindowsPowerShell\Modules\DrilQuip.Build\1.0.2\DrilQuip.Build.psm1'.
VERBOSE: Importing function 'Get-NextVersion'.
VERBOSE: Importing function 'Set-TfsWorkspaceFileTime'.

Creating next version number...
New version: 10.2.10928.11004

mklement0のコメントに基づくと、全体的な問題は、バージョン1.0.1が正しくセットアップされておらず、関数がインポートされていないことであるようです。Import-Moduleからの詳細な出力は、それを確認します。スクリプトが関数Get-NextVersionを呼び出したとき、PowerShellはモジュールの自動読み込みを使用して、関数を持っていたモジュールのバージョンを見つけて読み込みました。

バージョン1.0.1には、マニフェストにRootModuleの値がありませんでした。このエラーはバージョン1.0.2で修正されました。モジュールは、マニフェストのFunctionsToExport設定の代わりに、Export-ModuleMemberを使用して関数をエクスポートします。1.0.1ではルートモジュールがpsm1ファイルに設定されていなかったため、関数をエクスポートする方法がありませんでした。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ