سؤال

أنا أعمل على أتمتة التصحيحات لتطبيق البائع.كنت أرغب في استخدام بوويرشيل لتكرار أكثر من قائمة الخوادم واستخدام جهاز التحكم عن بعد لتثبيت على كل مربع.ومع ذلك ، فإن أحد الجوانب هو إعطائي صداعا كبيرا.لا بد لي من استدعاء برنامج نصي كمد المقدمة من قبل البائع لتعيين متغيرات النظام قبل تنفيذ البرنامج النصي التثبيت.لذلك أسمي السيناريو مثل ذلك في بوويرشيل:

Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir

أرى أنه تنفيذ كما يردد عملها في نافذة بوويرشيل بلدي ، ولكن المكالمات اللاحقة إلى البرنامج النصي التثبيت أي:

Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout

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

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

المحلول

التغييرات التي تم إجراؤها باستخدام SET القيادة هي لا دائم ، تنطبق على التيار cmd عملية فقط وتبقى حتى cmd يتم إنهاء العملية.

إذا كان ذلك ممكنا تعيين متغير البيئة باستخدام بناء جملة بوويرشيل:

Invoke-Command -session $session {$env:myvar = 1}

بدلا من ذلك يمكنك سلسلة الأوامر باستخدام فاصل الأوامر كمد & مثل هذا:

Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}

نصائح أخرى

نعم، تحتاج إلى سلسلة منها معا.يتم تعيين متغيرات البيئة في جلسة CMD الأولى التي تخطئ، ثم يتم بدء تشغيلها ثانية بدونها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top