后台 - 作业运行脚本没有硬编码

时间:2016-10-31 10:13:13

标签: powershell path background-process

我正在运行调用不同脚本的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"
}

但它似乎不起作用。我在同一个文件夹中有一些脚本,有些是在不同的硬盘上。有没有办法避免硬编码路径?

1 个答案:

答案 0 :(得分:0)

您将脚本块传递给该函数。除非您通过using scope 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"
}