PowerShell - تمرير الوسائط الموسعة إلى أمر Start-Job cmdlet

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

  •  21-12-2019
  •  | 
  •  

سؤال

نحن نحاول إنشاء مصفوفة تحتوي على متغيرات ثم تمرير هذه المصفوفة كموسعة إلى برنامج نصي، والذي سيتم تشغيله بواسطة Start-Job.لكن في الواقع فشل الأمر ولم نتمكن من العثور على السبب.ربما شخص ما يمكن أن تساعد!؟

$arguments= @()
$arguments+= ("-Name", '$config.Name')
$arguments+= ("-Account", '$config.Account')
$arguments+= ("-Location", '$config.Location')

#do some nasty things with $config

Start-Job -ScriptBlock ([scriptblock]::create("& .'$ScriptPath' [string]$arguments")) -Name "Test"

يفشل مع

Cannot validate argument on parameter 'Name'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
    + CategoryInfo          : InvalidData: (:) [Select-AzureSubscription], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.WindowsAzure.Commands.Profile.SelectAzureSubscriptionCommand
    + PSComputerName        : localhost

على الرغم من تعيين $config.name بشكل صحيح.

أيه أفكار؟

شكرا لكم مقدما!

هل كانت مفيدة؟

المحلول

يمكنني استخدام هذه الطريقة لإصدار المعلمات المسماة:

giveacodicetagpre.

يتيح لك استخدام نفس المعلمة التجزئة التي تستخدمها إلى Splat إلى البرنامج النصي إذا كنت تقوم بتشغيلها محليا.

هذا القليل من التعليمات البرمجية:

giveacodicetagpre.

جزءا لا يتجزأ من السلسلة القابلة للتوسيع سينشئ المعلمة: أزواج القيمة للحجج:

giveacodicetagpre.

نصائح أخرى

علامة الاقتباس المفردة هي رمز السلسلة الحرفي، فأنت تقوم بتعيين وسيطة "-Name" على السلسلة $config.Name لا Value of $config.Name.لاستخدام القيمة استخدم ما يلي:

$arguments= @()
$arguments+= ("-Name", $config.Name)
$arguments+= ("-Account", $config.Account)
$arguments+= ("-Location", $config.Location)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top