Background-Job 运行 没有硬编码的脚本
Background-Job run Scripts without hardcoding them
我是运行一个调用不同脚本的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"
}
但是好像不行。我在同一个文件夹中有一些脚本,有些在不同的硬盘驱动器上。有没有办法避免硬编码路径?
您正在将脚本块传递给函数。脚本块中的代码对脚本其余部分中的变量一无所知,除非您通过 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"
}
我是运行一个调用不同脚本的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"
}
但是好像不行。我在同一个文件夹中有一些脚本,有些在不同的硬盘驱动器上。有没有办法避免硬编码路径?
您正在将脚本块传递给函数。脚本块中的代码对脚本其余部分中的变量一无所知,除非您通过 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"
}