¿Hay alguna manera de saber lo que se ejecuta un script cuando se comenzó con la puesta en -filename trabajo?

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

  •  26-09-2019
  •  | 
  •  

Pregunta

Estoy empezando un trabajo PowerShell con algo como el siguiente comando:

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

Esta secuencia de comandos, sin embargo tiene que saber dónde se encuentra, ya que se ejecuta otros comandos en función de su ubicación con respecto a la misma. Cuando se ejecuta directamente desde el indicador, construcciones tales como estos trabajos:

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

Esto no funciona en absoluto cuando comenzó como un puesto de trabajo como en el primer ejemplo, sin embargo. ¿Cómo puedo determinar dónde estoy corriendo de cuando me puse como un trabajo?

¿Fue útil?

Solución

Parece ser como el caso de comunicación remota donde el archivo se pasa en el trabajo como un bloque de script por lo que la noción de qué archivo de la secuencia de comandos vino de que se pierde. Se podía pasar en el camino, así (a pesar de que parece menos que ideal):

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

Otros consejos

ACTUALIZADO:

Me encontré con este ejemplo de código:

http://blog.brianhartsock.com / 2010/05/22 / a-mejor-Start-Job-cmdlet /

En lugar de un ScriptBlock, utilizar el parámetro FilePath, I modificado como tal:

param([string]$file)

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

Esto se llama como:

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

El uso de init (-InitializationScript) y disparando el Set-Location mueve el proceso de ejecución actual al directorio de la secuencia de comandos, por lo que, desde allí se puede determinar la ubicación relativa.

A medida que el blog menciona, usted podría tener esto como un script externo (he probado la mía puesta en JobAt.ps1) o que sea parte de su perfil de usuario / cuenta de servicio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top