سؤال

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

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

يتم ذلك على خادم (Windows 2008)، لذا لا يمكنني تثبيت cygwin أو ما شابه.اعتقدت أن الأمر "find" في نظام التشغيل Windows قد يساعد، ولكن أفضل ما يمكنه فعله هو حذف السطر بأكمله الذي يحتوي على الخيار "/v".

محدث: لقد أجريت بعض الأبحاث، وأعتقد أن PowerShell هو الحل الأمثل.كلمة المرور موجودة في متغير البيئة، لذا عليك معرفة كيفية قراءتها واستبدالها.

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

المحلول 2

لقد اطلعت على خيار PowerShell وبعد تجاوز الترميز وعلامات الاقتباس وبعض المشكلات الأخرى، إليك الحل النهائي:

powershell "& {(Get-Content $env:LOG_FILENAME)|Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'} | Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\")}"

يتم استدعاء هذا الخط من ملف دفعي، كخطوة أخيرة في البرنامج النصي للنشر.في وقت سابق من البرنامج النصي، تم تعيين قيم LOG_FILENAME وPASSWORD.

تقسمها:

تنفيذ PowerShell من ملف دفعي:

powershell "& {...}"

القراءة في ملف السجل:

(Get-Content $env:LOG_FILENAME)

لكل سطر، استبدل [regex]::escape($env:PASSWORD) بـ '######':

Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'}

قم بإلغاء أي أحرف في متغير البيئة PASSWORD والتي يمكن تفسيرها على أنها حرف محجوز regex:

[regex]::escape($env:PASSWORD)

احفظ المخرجات في ملف سجل جديد مع ملحق ‎.clean.[timestamp].log بالاسم الأصلي:

Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\")

نصائح أخرى

إذا كان بإمكانك استخدام JavaScript، فيجب القيام بشيء مثل ما يلي:

var rePassword = /password=\S+/g;
while (!WScript.StdIn.AtEndOfStream)
{
  WScript.StdOut.WriteLine(WScript.StdIn.ReadLine().replace(rePassword, 'password=sanitized'));
}

سيؤدي ذلك إلى قراءة الإدخال القياسي الخاص به، واستبدال أي تكرارات للسلسلة "password =" متبوعة بأي عدد من الأحرف التي لا تحتوي على مسافات بيضاء بالسلسلة "password=sanitized" وكتابة النتائج إلى الإخراج القياسي.يمكنك تعديل التعبير العادي rePassword والسلسلة البديلة لتناسب متطلباتك.بافتراض أنك قمت بحفظ هذا البرنامج النصي باسم "sanitize.js"، يمكنك تشغيله من برنامج نصي دفعي كما يلي:

cscript sanitize.js < logfile.log > logfile.sanitized
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top