0

給料前でごめんなさい。もう一度やり直します:

状況は複雑すぎて説明できませんが、基本的に問題は次のとおりです。

  • あるスクリプトから同じマシンで実行されている別のスクリプトに文字列 (最大 20 文字) を渡す方法。
  • 2 つのスクリプトは、同じマシン同じユーザー コンテキストでバックグラウンドで継続的に実行されますが、組み合わせることはできません
  • あるスクリプトを別のスクリプトにドットソースすることはできません。

私は、あるスクリプトに文字列を含むファイルを、他のスクリプトによって監視されているディレクトリに作成させることでそれを行いました。したがって、それが表示されると、他のスクリプトが情報を読み取ります。動作しますが、「汚い」と感じます。:)

スクリプト間で情報を渡すための「ベストプラクティス」があるかどうか、または少なくともよりエレガントな方法があるかどうか疑問に思っていました。

ありがとう。

4

4 に答える 4

0

あなたの質問はあまり明確ではありませんが、私はそれに答えようとします。

2 番目のスクリプトが (何か) を実行している間に、最初のスクリプトの処理を続行したいようです。

特定の操作をジョブ (スレッドのようなもの) に配置し、後でwhile ($true)ニーズを満たす条件を指定するループでそれを受け取り、そのジョブまたはスレッドから結果を受け取った後にループから抜け出すことができます。

Get-Help | Start-Job詳細については を参照するか、Google にアクセスしてみてください。

また、外部スクリプト ファイルから使用する関数をインポートするimport-module '.\pathtoscriptmodule.psm1'か、単にインポートすることによって、別のスクリプトからユーザー定義関数をインポートすることもできます。.\Pathtoscriptdefiningfunctions.ps1

Start job..の使用例

$scriptblock = {
param($myParam); 
    # My commands here
}

Start-Job -ScriptBlock $scriptblock -args $myParamsIWantToPassToScriptblock

While ($true){
    # To view status of that background job
    Get-Job *
    # Add your logic for fulfilling your conditons here, then
    # break; <<uncomment to break out of loop
    if (conditions met)
    {
        break;
    }
}

# Gets the output from that job. -Keep keeps the output in memory
# if you want to call it multiple times
Receive-Job * -Keep
于 2016-03-25T17:41:42.253 に答える
0

簡単な解決策は、2 番目のスクリプトを関数にしてから、それをドット ソース化し、戻り値を変数にキャプチャすることです。

それ以外の方法でこれが可能かどうかは完全にはわかりません$global:variableName。ジョブとして何かを試したり、実行したりすることができます。それでもうまくいかない場合は、2 番目のスクリプトで結果をファイルに保存し、最初のスクリプトからそのファイルにアクセスすることができます。

于 2016-03-25T17:35:53.887 に答える
0

実行空間の使用を検討できます。

http://learn-powershell.net/2013/04/19/sharing-variables-and-live-objects-between-powershell-runspaces/

于 2016-03-26T00:20:10.083 に答える