كيكر, متعدد الخطوط تنفيذ عملية SSIS أو مهمة أو إخراج ملف دفعي النتائج SSIS

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

  •  06-07-2019
  •  | 
  •  

سؤال

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

  1. هل هناك طريقة لتنفيذ متعددة سطر الأوامر في واحدة من تنفيذ العملية المهمة ؟
  2. هل هناك طريقة لتنفيذ robocopy.exe في حين ينتحل حساب آخر في السطر ؟
  3. هل هناك طريقة لكتابة النتائج من ملف دفعي إلى أي متغير في SSIS أو في SSIS قاعدة بيانات السجل ؟

إذا كان هناك إيجابية الإجابة عن أي من الأسئلة الثلاثة المذكورة أعلاه, ثم كنت قد تكون قادرة على العمل في طريقة لإضافة وظيفة النجاح أو الفشل القواعد استنادا إلى نتائج robocopy.

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

المحلول

هذا يمكن بسهولة أن achived إذا كان لديك تمكين استخدام إجراء مخزن الموسعة "xp_cmdshell" (انظر الكتب على الانترنت من أجل "تكوين ناحية سطح").

في ما يلي عينة علي بناء .CMD الملف يحتوي على جميع كيكر خيارات بسيطة ينفذ هذا الأمر ملف باستخدام xp_cmdshell الاستيلاء على الإخراج إلى متغير جدول (يمكن استمرار الجدول بدلا من ذلك):

فقط إضافة إلى تنفيذ T-SQL بيان المهمة الخاص بك حزمة SSIS مع البيان التالي:

/** START **/

DECLARE @cmdfile nvarchar(255) = N'C:\myFolder\myCommandFile.cmd'
DECLARE @logtable table (
    [RowId] integer IDENTITY(1,1) NOT NULL
    ,[Message] nvarchar(1024) NULL
)

INSERT INTO @logtable ([Message])
EXEC xp_cmdshell @cmdfile

SELECT *
FROM @logtable
WHERE
[Message] IS NOT NULL

/** END **/

اعتمادا على خيارات تسجيل مجموعة ROBOCOPY يمكنك إظهار التقدم, رؤوس, تقرير أو أكثر.ترى كيكر وثائق تلك الخيارات.أيضا محاولة استخدام /المحملة التبديل إذا لانتزاع أي وحدة الإخراج من الأمر ROBOCOPY.

نصائح أخرى

طريقة واحدة أستطيع أن أفكر في القيام بذلك هو تنفيذ مجموعة الأوامر ( حتى يمكنك تنفيذ عدة بنود) مع RUNAS (انتحال شخصية أخرى في حساب المستخدم)

يمكنك التقاط إخراج الملف الدفعي في ملف سجل و قراءة محتويات هذا في SSIS باستخدام البرنامج النصي.

أنا غير متأكد حول كيفية كتابة إلى SSIS سجل أنا مهتم لمعرفة ما المطورين الآخرين يجب أن أقول عن ذلك.

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

هل هناك طريقة لتنفيذ متعددة سطر الأوامر في واحد من تنفيذ العملية المهمة ؟

نعم استخدم "Cmd.exe" كما قابل للتنفيذ إنشاء string متغير مع التعبير التالي (العينة):

*"/C \"start robocopy c:\\temp\\v10.2a c:\\temp\\v1 *.WRI /Z /S && start robocopy c:\\temp\\v10.2a c:\\temp\\v1 *.dll /Z /S\""*

ثم خريطة الحجج المعلمة عبر مكون التعبير.ثم يمكنك تنفيذ تلك اثنين (أو أكثر) كيكر في //

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