2013-09-26 18 views
6

Windows PowerShell ISEでPowerShellスクリプトを作成しています。スクリプトでsometingを変更してスクリプトを実行すると、最後に保存されたバージョンのスクリプトは実行されず、古いものが実行されます。 2回目にスクリプトを実行した場合のみ、現在のバージョンが使用されます。スクリプトの最新バージョンを常に実行するにはどうすればよいですか?Windows PowerShell ISE(旧バージョン)

答えて

1

編集を行った後、ドットソーシングでスクリプトを再度ソースする必要があります。あなたは、以下のコマンドを実行して、コンソールに、あなたは現在のディレクトリにするMyScript.ps1という名前のファイルを持っていると仮定すると:

. .\MyScript.ps1 

スクリプトで特定の機能を呼び出したい場合は、あなただけで行うことができます。

. .\MyScript.ps1 
MyFunction 
1

これは非常に古い質問ですが、私は同じ問題を偶然見つけたと思います。私の場合は、呼び出した後に関数を定義しました。これはうまくいくようですが、 "myfunc"には以前の呼び出しの値がまだあるためです。 "Hello、World!"を変更すると、新しい値が2回目の試行でのみ有効になります。

Invoke-Command -ScriptBlock ${function:myfunc} 

function myfunc() { 
    Write-Host "Hello, World!" 
} 

あなたはそれを呼び出そうと前に、単に機能を定義し、問題を解決するには。

function myfunc() { 
    Write-Host "Hello, World!" 
} 

Invoke-Command -ScriptBlock ${function:myfunc} 
0

古いファイルのISE "キャッシング" との私の経験:

ISEの挙動は、PSモジュール(.psm1)と簡単なPSスクリプト(PS1)のために異なっています。私はPS & ISE with Win10Proを使用しています。

A)のモジュールと 私の経験(PSM1)

  1. すでに適切なモジュールに配置されたロードモジュールファイル "hello.psm1" ディレクトリ 「C:\ Users \ユーザーMYUSERNAME \ドキュメント\ WindowsPowerShell \モジュール\こんにちは」 によってISE
  2. によって機能を実行する 『ファイル、例えばを変更
  3. 』(あなたがで モジュールを実行しないことがあり、 『スクリプトの実行』を参照)を実行し、選択 関数の出力 'Write-Host "Hello World!"'を 'Write-Host "Hello"'に変換し、 ファイルを保存します。
  4. "Run selection"で関数を実行すると、古い出力(例えば、 "0")を持つ の古い関数が実行されます。 "こんにちは世界!"。 「選択範囲を実行」コマンドを繰り返す場合も同様です。
  5. ISEを終了してもう一度ロードするだけで、新しい機能が "Run Selection"によって実行されます。

B) スクリプト(.PS1)での私の経験。

  1. 「実行選択」を実行すると、モジュールと同じ動作になります。
  2. "Run Script"を一度実行して関数を呼び出すと、関数の現在のバージョンが実行されます。もちろん、定義された「後」のファイル内の関数(行番号100など)を(たとえば10〜20行目で)呼び出します。これにより、キャッシングはありません。
  3. 特に「Run Script」を実行すると、実行されたコードが関数を呼び出していない間に「Run Selection」で関数を実行すると、関数の現在のバージョンが実行されます。

C) は、ここに私の問題を回避するには、モジュール開発をより快適にすることです:

  • 簡単なスクリプトは、「スクリプトの実行」で実行することができます。
  • モジュール(.PSM1)を開発したい場合は、開発フェーズで簡単なスクリプト(.PS1)という名前を付けます。私は適切なモジュールフォルダ、例えば に既にファイル(例えば "hello.ps1")を配置します。モジュール "Hello"の場合、 "C:¥Users¥MyUserName¥Documents¥WindowsPowerShell¥Modules¥Hello"です。もちろんこれでPowerShellコンソールから関数をモジュール関数として実行することはできません。 ISEを使用してテスト用の関数を呼び出すだけです。
  • モジュールはスクリプトとして実行されないため、ファイル内に実行可能なコードはなく、関数(AFAIK)だけです。だから私はスクリプト上で "Run Script"を安全に実行するかもしれません。

ISE開発でモジュールファイルを変更した場合、「Run Selection」で関数を実行する前に、常に「Run Script」を実行します。

これにより、私は常に現在のバージョンの関数を実行します。

私の問題は少し異なりましたが、この質問と回答は解決策を見つけるのに非常に役立ちました。 ISEの「キャッシング」とそれに役立つ答えについては、このような質問を見つけるのは難しいです。

こんにちは ロルフ

関連する問題