2016-10-31 7 views
0

異なるスクリプトを呼び出すPowerShell GUIを実行しています。バックグラウンドジョブ実行スクリプト(ハードコードなし)

function start-jobhere([scriptblock]$block) { 
    Start-Job -ArgumentList (Get-Location),$block { 
    Set-Location $args[0]; 
    Invoke-Expression $args[1] 
    } 
} 

$handler_button1_Click = { 
    $job1 = start-jobhere {& K:\Uploader\Import\DataUploader.ps1} -Name "Uploader" 
} 

は、私が使用してそれを避けるために試してみました:私は現在のようなハードコードされたパスを使用してい

$LocalPath = ($MyInvocation.MyCommand.Path).ToLower().Replace("datauploader.ps1", "") 

$handler_button1_Click = { 
    $job1 = start-jobhere {& $LocalPath\DataUploader.ps1} -Name "Uploader" 
} 

しかし、動作するようには思えません。同じフォルダにいくつかのスクリプトがあり、いくつかは異なるハードドライブにあります。ハードコーディングされたパスを避ける方法はありますか?

答えて

0

あなたは関数にスクリプトブロックを渡しています。あなたがそれらをusingscope modifierを通じて周知徹底しない限り、スクリプトブロック内のコードは、スクリプトの残りの変数については何も知らない:あなたはとにかくスクリプトを実行したい場合は言ったでは

$job1 = start-jobhere {& "$using:LocalPath\DataUploader.ps1"} -Name "Uploader" 

、なぜ上がりません」あなたのパスを文字列として関数に渡していますか?

function start-jobhere([string]$Name, [string]$Script) { 
    Start-Job -Name $Name -ScriptBlock { 
    Set-Location $args[0] 
    & $args[1] 
    } -ArgumentList (Get-Location), $Script 
} 

$handler_button1_Click = { 
    $job1 = start-jobhere "$LocalPath\DataUploader.ps1" -Name "Uploader" 
} 
関連する問題