モジュールの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がコンピューターに存在することを確認していました。
スクリプトが古いバージョンのモジュールをインポートして使用することを保証するにはどうすればよいですか?
-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 ...よりも優先されているようです。
これは、モジュールインストールのマシンとユーザーのスコープに関係していると思います。戻ってユーザースコープのモジュールを削除し、マシンスコープのモジュールのすべてのバージョンをインストールして、それが役立つかどうかを確認します。
モジュールのすべてのバージョンをユーザースコープフォルダーから削除してから、スクリプトを再試行しました。それでも失敗しますが、モジュールの両方のバージョンが同じモジュールフォルダーの場所から取得されています。
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.2と2.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]
コメントを追加