Есть ли способ сказать, какой скрипт работает при запуске с начала-задания -FileName?

StackOverflow https://stackoverflow.com/questions/4227364

  •  26-09-2019
  •  | 
  •  

Вопрос

Я начинаю работу PowerShell с чем-то вроде следующую команду:

start-job -filename my_script.ps1 -argumentlist ($v1, $v2, $v3)

Этот скрипт, однако, должен знать, где он расположен, потому что он запускает другие команды на основе их местоположения относительно него. При запуске непосредственно из командной строки конструкций, таких как эти работы:

join-path (split-path (& { $myinvocation.scriptname })) "relative path\filename"
join-path (split-path $myinvocation.mycommand.definition) "relative path\filename"

Это не работает вообще, когда начинается как работа, как в первом примере. Как я могу определить, откуда я бегу, когда я начинаю как работа?

Это было полезно?

Решение

Похоже, это похоже на корпус удаления, когда файл передается в задание в качестве блока скрипта, поэтому понятие которого произошел скрипт, от которого произошел скрипт. Вы также можете пройти в пути (хотя это кажется менее идеальным):

PS> gc .\job.ps1
param($scriptPath)
"Running script $scriptPath"
PS> $job = Start-Job -FilePath .\job.ps1 -ArgumentList $pwd\job.ps1
PS> Wait-Job $job

Id  Name            State      HasMoreData     Location  Command
--  ----            -----      -----------     --------  -------
13  Job13           Completed  True            localhost param($scriptPath)...


PS> Receive-Job $job.id
Running script C:\Users\hillr\job.ps1

Другие советы

Обновлено:

Я наткнулся на этот пример кода:

http://blog.brianhartsock.com/2010/05/22/a-better-start-job-cmdlet/

Вместо того, чтобы сценарий, чтобы использовать параметр FilePath, я изменил его как таковой:

param([string]$file)

$filePath = split-path $file -parent
Start-Job -Init ([ScriptBlock]::Create("Set-Location $filePath")) -FilePath $file -ArgumentList $args

Это будет называться как:

Start-JobAt c:\full_path\to\file\my_script.ps1 ($v1, $v2, $v3)

Использование -Init (-initializationscript) и выключение от установленного местоположения перемещает текущий процесс выполнения в каталог сценария, поэтому оттуда вы можете определить относительное местоположение.

Как упоминает сообщение в блоге, вы можете иметь это в качестве внешнего скрипта (я протестировал шахты как Start-jobat.ps1) или сделать его частью профиля вашей учетной записи пользователя / сервисной учетной записи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top