سؤال

التكامل المستمر

لقد كنت أعمل على نص PowerShell للحفاظ على عملية التطوير لدينا. كنت أخطط لتشغيله كحدث ما بعد البناء ، لكنني أواجه بعض المشاكل.

من مطالبة PowerShell ، تعمل ما يلي بشكل رائع:

PS C:\> ./example.ps1

ومع ذلك ، عند محاولة تشغيل هذا من cmd.exe كالآتي:

C:\> powershell -command "&\"C:\path to script\example.ps1\""

ينفذ البرنامج النصي ولكني أحصل على جولة من الأخطاء مرة أخرى من PowerShell ، والتي تتكون في الغالب من أخطاء حل المسار من resolve-path وظيفة:

حل حل: لا يمكن العثور على المسار 'c: المستندات والإعدادات bdunbar مستنداتي Visual Studio 2008 Projects cgmfamilycomm familycomm iirf cms isapirewrite4.dl l' لأنها غير موجودة. في C: المستندات والإعدادات bdunbar مستنداتي Visual Studio 2008 Projects c GmfamilyComm Scripts cms.ps1: 4 char: 27 + $ iirfpath = (حل المسار <<<<< ../iirf/cms /isapirewrite4.dll).path ،

حل الحل: لا يمكن العثور على المسار "C: المستندات والإعدادات bdunbar مستنداتي Visual Studio 2008 Projects cgmfamilycomm familyComm familyComm 'لأنها غير موجودة. في C: المستندات والإعدادات bdunbar مستنداتي Visual Studio 2008 Projects c GmfamilyComm Scripts cms.ps1: 5 char: 27 + $ vdirpath = (حل المسار <<<<<< ../familycomm). طريق

هل هناك طريقة للتغلب على ذلك؟ هل يمكن أن تكون مشكلة في الجري resolve-path تحت cmd.exe?

تحديث

لقد تمكنت من تغيير الأشياء للتغلب على الأخطاء التي تحدث ، لكنني ما زلت أتلقى أخطاء تعمل بشكل جيد من موجه أوامر PowerShell. لا يمكنني معرفة الفرق.

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

المحلول

لقد قمت بهذا العمل في الماضي (انظر http://sharepointpdficon.codeplex.com/sourcecontrol/changeset/view/13092#300544 إن كنت مهتما):

C: windows system32 windowspowershell v1.0 powerShell.exe -nologo -ninterctive -Command. '$ (projectDir) deployment postbuildscript.ps1' -projectdir: '$ (projectdir)' -configurationname: '$ (configurationn. ) '-TargetDir:' $ (targetdir) '-TargetFilename:' $ (targetFilename) '-targetName:' $ (targetname)

ثم قم برمي هذه المعلمات في السطر الأول من البرنامج النصي بعد البناء (إذا كنت تعتقد أنك قد تكون قادرًا على استخدامها):

param($ProjectDir, $ConfigurationName, $TargetDir, $TargetFileName)

أيضا يجب أن أشير ، أنا لا أستخدم هذا في الوقت الحاضر. أحببت استخدامه كصاحب سريع لإعادة تحميل بيانات الاختبار لتشغيل اختبارات التكامل.

نصائح أخرى

يبدو أن مشكلتك هي كيف يتم حل المسارات النسبية. يتم حل المسارات النسبية بناءً على الموقع الحالي (مخزنة في $pwd) وليس على أساس موقع البرنامج النصي. لذلك إذا أطلقت البرنامج النصي من C:\, ، بالتأكيد لن يعمل.

أود أن أقترح عليك حساب المسارات بناءً على وسيطة (مثل عروض بيتر سيل) ، أو الاستيلاء على الموقع الفعلي للنص من:

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