هل هناك أي طريقة لمعرفة ما هو البرنامج النصي الذي يتم تشغيله عندما يبدأ مع اسم الجانبية؟

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/

بدلاً من برنامج ScriptBlock ، لاستخدام معلمة 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