0

リモート マシンでスクリプトを実行するスクリプトを作成しました。スクリプトはリモート マシンで次のように編成されます。
lib - ライブラリ ファイルが配置される場所です
。 tests - テスト スクリプトが配置される場所です。

リモートマシン(テストフォルダー内)のスクリプトは、ライブラリフォルダーから他のモジュールをインポートします

Import-Module -Name "..\lib\commonlib.psm1".

テスト フォルダーのリモート マシン内のスクリプトが呼び出されると、エラーが発生します。

Import-Module : 指定されたモジュール '..\lib\commonlib.psm1' は、どのモジュール ディレクトリにも有効なモジュール ファイルが見つからなかったため、読み込まれませんでした (ディレクトリ lib および commonlib.psm1 は正しいパスに存在します)。

この問題はどのように解決できますか?

以下は、リモート マシンでスクリプトを実行するコマンドです。

$job = "c:\scripts\test.ps1" $cmdRes = Invoke-Command -ComputerName $remoteMachineName -ScriptBlock {& $args[0]} -ArgumentList $job -AsJob

4

2 に答える 2

1

私が PowerShell v2 で採用しているもう 1 つのアプローチは、スクリプトで相対参照が使用されている場合に Push-Location と Pop-Location を使用することです。このようにして、スクリプト内でできるだけ単純にすべてを参照でき、問題を引き起こすコンテキストの変更を心配する必要がありません。Keith の v2 の例を続けるには:

Push-Location -Path $(Split-Path $MyInvocation.MyCommand.Path -Parent)
Import-Module ..\lib\commonlib.psm1

.\SomeOtherScript.ps1 $var # call to another script
... #rest of script
Pop-Location

Pop-Location は必要ありませんが、スクリプトの実行後に現在のディレクトリを変更しないままにします。これは場合によっては重要になる可能性があります。

于 2013-11-06T16:07:14.300 に答える