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