Powershell استعمال ڪندي گريڊ 7-9 ۾ اسڪول جي ٻارن لاءِ سادي ٽيليگرام بوٽ لاءِ ٽيمپليٽ

هڪ دوست سان ڳالهه ٻولهه دوران اوچتو مون کي معلوم ٿيو ته سندن اسڪول ۾ 8 کان 10 گريڊ جي ٻارن کي پروگرامنگ نه سيکاري ويندي آهي. لفظ، ايڪسل ۽ سڀ ڪجهه. نه لوگو، نه پاسڪل، نه به VBA ايڪسل لاءِ.

مون کي ڏاڍي حيرت ٿي، انٽرنيٽ کوليو ۽ پڙهڻ شروع ڪيم-
هڪ خاص اسڪول جي ڪمن مان هڪ هڪ نئين نسل جي تعليم کي فروغ ڏيڻ آهي جيڪو معلومات جي سماج جي حالتن کي پنهنجي ترقي ۽ زندگي جي سطح تي پورو ڪري ٿو.
اهو ڪورس شاگردن کي عملي طور تي پاسڪال پروگرامنگ ٻولي جي بنيادي تعميرات جي ڄاڻ کي مضبوط ڪرڻ جي اجازت ڏيندو. (2017 لاءِ ڪجهه جمنازيم جي پروگرام مان)

آخر ۾، مون فيصلو ڪيو ته ڪجھ ڪلاڪ خرچ ڪيان ۽ هڪ مثال ٺاهيو ”اسڪول جي ٻارن لاءِ سادو بوٽ ڪيئن ٺاهيو“.

هيٺ ڏنل ڪٽ اهو آهي ته پاور شيل ۾ هڪ ٻيو سادو بوٽ ڪيئن لکجي ۽ ان کي ويب هِڪ، سفيد IPs، وقف ڪيل سرورز، ڪلائوڊ ۾ ڊيپلائي ڪيل ورچوئل مشينن وغيره کان سواءِ ڪم ڪجي - باقاعده ونڊوز سان گڏ گهر جي پي سي تي.

TLDR: گراماتي ۽ حقيقتن جي غلطين سان گڏ هڪ ٻيو بورنگ مضمون، پڙهڻ لاءِ ڪجهه به ناهي، نه مزاح، نه تصويرون.

مضمون ۾ ڪا به نئين ڳالهه نه آهي، تقريبن هر شيءِ اڳ ۾ ئي لکيل آهي Habré تي، مثال طور مضمونن ۾ ھدايتون: ٽيليگرام ۾ بوٽس ڪيئن ٺاھيو и سسٽم ايڊمنسٽريٽر لاءِ ٽيليگرام بوٽ.
ان کان علاوه، مضمون عمدي طور تي بيڪار آهي ته جيئن هر وقت تعليمي ادب جو حوالو نه ڏنو وڃي. متن ۾ Gang 4، PowerShell Deep Dives يا، چئو، The 5 Pillars of the AWS Well-architected Framework جو ڪوبه حوالو نه آهي.

اڳڪٿي جي بدران، توهان ڇڏي سگهو ٿا

ڇڏڻ لاءِ آزاد محسوس ڪريو2006 ۾، Microsoft ان وقت جي ونڊوز XP، Vista، ۽ سرور 1.0 لاءِ PowerShell 2003 جاري ڪيو. ڪجھ طريقن سان، ان کي تبديل ڪيو جيئن شيون cmdbat اسڪرپٽ، vb اسڪرپٽ، ونڊوز اسڪرپٽ ميزبان ۽ JScript.

هينئر به، پاور شيل کي صرف لوگو آپشنز کان پوءِ ايندڙ قدم سمجهي سگهجي ٿو، ان جي بدران شايد اڃا استعمال ٿيل Delphi (يا ڪا پراڻي شيءِ)، لوپ، ڪلاسز، فنڪشن، ڪال MS GUI جي موجودگي جي باوجود، گيٽ انضمام ۽ پوء تي.

پاور شيل نسبتاً گهٽ استعمال ٿيندو آهي؛ توهان ان کي صرف پاور شيل ڪور، VMware vSphere PowerCLI، Azure PowerShell، MS Exchange، Desired State Configuration جي صورت ۾ ملن ٿا. PowerShell ويب رسائي ۽ هڪ درجن يا ان کان وڌيڪ گهٽ استعمال ٿيل پروگرام ۽ افعال. ٿي سگهي ٿو ته هن کي ڇڏڻ سان هڪ ٻيو واء حاصل ڪندو WSL2، پر اهو بلڪل نه آهي.

پاور شيل جا ٽي وڏا فائدا پڻ آهن:

  1. اهو نسبتا سادو آهي، ان بابت تمام گهڻو ادب ۽ مثال آهي، ۽ جيتوڻيڪ روسي ۾، مثال طور، هڪ مضمون Foreach بابت - ڪتاب مان پاور شيل کوٽائي ۾ - فرق بابت () ۽ {}
  2. هو ايڊيٽر سان گڏ وڃي ٿو آئي اي، ونڊوز سان شامل. اتي به ڪجهه قسم جو ڊيبگر آهي.
  3. ان کان سڏ ڪرڻ آسان آهي هڪ گرافڪ انٽرفيس جي تعمير لاء اجزاء.

0. تياري.

اسان کي ضرورت پوندي:

  • ونڊوز پي سي (مون وٽ ونڊوز 10 آهي)
  • گهٽ ۾ گهٽ ڪجهه قسم جي انٽرنيٽ جي رسائي (مثال طور NAT ذريعي)
  • انهن لاءِ جن وٽ ٽيليگرام تائين محدود رسائي آهي - برائوزر ۾ انسٽال ٿيل ۽ ترتيب ڏنل فري گيٽ، ڪجهه ڏکين حالتن ۾، گڏو گڏ Symple DNS Crypt
  • توهان جي فون تي ڪم ڪندڙ ٽيليگرام ڪلائنٽ هجڻ
  • تمام بنيادي کي سمجھڻ - ڇا ھڪڙو متغير، صف، لوپ آھي.

کوليو ۽ پڙهو آرٽيڪل - ھدايتون: ٽيليگرام ۾ بوٽس ڪيئن ٺاھيو и سسٽم ايڊمنسٽريٽر لاءِ ٽيليگرام بوٽ

1. اچو ته هڪ ٻيو ٽيسٽ بوٽ ٺاهيو.

جيئن ته هرڪو اهو ڄاڻي ٿو، ۽ اڳ ۾ ئي ٿي چڪو آهي، توهان پڻ ان کي ڇڏي سگهو ٿاجيئن مٿي ڏنل مضمون ۾ چيو ويو آهي - سڀ کان پهريان، ٽيليگرام لاء هڪ بوٽ - اهو اڃا تائين هڪ ايپليڪيشن آهي جيڪو توهان جي پاسي تي هلندو آهي ۽ ٽيليگرام بوٽ API ڏانهن درخواستون ڪري رهيو آهي. ان کان علاوه، API واضح آهي - بوٽ هڪ مخصوص URL کي پيرا ميٽرز سان رسائي ٿو، ۽ ٽيليگرام JSON اعتراض سان جواب ڏئي ٿو.

لاڳاپيل مسئلا: جيڪڏهن ڪنهن اڻڄاتل طريقي سان توهان JSON اعتراض کان ڪجهه ڪوڊ وٺو ۽ ڪنهن طرح ان کي عمل لاءِ موڪليو (مقصد تي نه)، ڪوڊ توهان لاءِ عمل ڪيو ويندو.

ٺاھڻ جي عمل کي مٿي ٻن مضمونن ۾ بيان ڪيو ويو آھي، پر مان ورجائي ٿو: ھڪ ٽيليگرام ۾ اسان رابطا کوليندا آھيون، @botfather کي ڳوليندا آھيون، کيس ٻڌايو /newbot، ھڪڙو Botfortest12344321 ٺاھيو، ان کي Mynext1234bot سڏين، ۽ ھڪڙو پيغام وصول ڪيو ھڪڙي منفرد چيڪ سان. فارم 1234544311:AbcDefNNNNNNNNNNNNNN

ڪنجي جو خيال رکجو ۽ ان کي نه ڏيو!

پوءِ توھان بوٽ کي ترتيب ڏئي سگھوٿا، مثال طور، ان کي گروپن ۾ شامل ڪرڻ کان منع ڪريو، پر پھرين مرحلن ۾ اھو ضروري نه آھي.

اچو ته BotFather کان پڇون “/mybot” لاءِ ۽ سيٽنگون ترتيب ڏيو جيڪڏهن اسان کي ڪجهه پسند نه آهي.

اچو ته رابطا ٻيهر کوليون، ڳوليو @Botfortest12344321 اتي (اهو لازمي آهي ته ڳولا کي شروع ڪرڻ @ سان)، ڪلڪ ڪريو “شروع ڪريو” ۽ bot ڏانهن لکو “/Glory to the robots.” / نشان جي ضرورت آهي، حوالن جي ضرورت ناهي.
بوٽ، يقينا، ڪجھ به جواب نه ڏيندو.

اچو ته چيڪ ڪريو ته بوٽ ٺاهيو ويو آهي ۽ ان کي کوليو.

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNNN/getMe
جتي 1234544311:AbcDefNNNNNNNNNNNNNN اڳ ۾ مليل چاٻي آهي،
۽ هڪ لڪير وانگر حاصل ڪريو
{"OK":true,"result":{""}}

اسان وٽ پهريون ڳجهو جملو آهي (ٽوڪن). هاڻي اسان کي ٻيو ڳجهو نمبر ڳولڻو پوندو - بوٽ سان چيٽ جي سڃاڻپ. هر چيٽ، گروپ، وغيره انفرادي آهي ۽ ان جو پنهنجو نمبر آهي (ڪڏهن ڪڏهن مائنس سان - کليل گروپن لاءِ). هن نمبر کي ڳولڻ لاء، اسان کي برائوزر ۾ درخواست ڪرڻ جي ضرورت آهي (حقيقت ۾، اهو برائوزر ۾ بلڪل ضروري ناهي، پر بهتر سمجهڻ لاء توهان ان سان شروع ڪري سگهو ٿا) پتو (جتي 1234544311:NNNNNNNNNN توهان جو ٽوڪن آهي.

https://api.telegram.org/bot1234544311:NNNNNNNNN/getUpdates

۽ جواب حاصل ڪريو جهڙوڪ

{"OK":true,"result":[{"update_id":...,... چيٽ":{"id":123456789

اسان کي chat_id جي ضرورت آهي.

اچو ته چيڪ ڪريو ته اسان چيٽ تي دستي طور تي لکي سگھون ٿا: برائوزر کان ايڊريس کي ڪال ڪريو

https://api.telegram.org/botваштокен/sendMessage?chat_id=123456789&text="Life is directed motion"

جيڪڏهن توهان پنهنجي چيٽ ۾ بوٽ مان هڪ پيغام وصول ڪيو، ٺيڪ، توهان اڳتي وڌو اسٽيج تي.

اهو طريقو (براؤزر ذريعي) توهان هميشه چيڪ ڪري سگهو ٿا ته ڇا لنڪ جي نسل سان مسئلا آهن، يا جيڪڏهن ڪا شيء ڪٿي لڪيل آهي ۽ ڪم نٿو ڪري.

پڙهڻ جاري رکڻ کان پهريان توهان کي ڄاڻڻ جي ضرورت آهي

ٽيليگرام ۾ ڪيترن ئي قسمن جا گروپ چيٽ آهن (کليل، بند). انهن چٽن لاءِ، ڪجھ فنڪشن (مثال طور، id) مختلف آهن، جيڪي ڪڏهن ڪڏهن ڪجهه مسئلا پيدا ڪن ٿا.

اچو ته سمجهون ته اهو 2019 جي آخر ۾ آهي، ۽ اسان جي وقت جو هيرو پڻ، مشهور انسان-آرڪسٽرا (منتظم، وڪيل، معلوماتي سيڪيورٽي ماهر، پروگرامر ۽ عملي طور تي MVP) Evgeniy V. $i متغير کي هڪ صف کان ڌار ڪري ٿو، لوپ ۾ مهارت حاصل ڪئي آهي، ڏسو ايندڙ ٻن سالن ۾ چاڪليٽي ۾ مهارت حاصل ڪندو، ۽ پوءِ PowerShell سان متوازي پروسيسنگ и ForEach-Object Parallel اهو ايندو.

1. اسان سوچيو ته اسان جو بوٽ ڇا ڪندو

مون وٽ ڪو به خيال نه هو، مون کي سوچڻو هو. مون اڳ ۾ ئي هڪ بوٽ نوٽ بڪ لکيو آهي. مان هڪ بوٽ ٺاهڻ نه چاهيندو هو "جيڪو ڪجهه موڪليندو آهي." Azure سان ڳنڍڻ لاءِ توهان کي ڪريڊٽ ڪارڊ جي ضرورت آهي، پر شاگرد اهو ڪٿان حاصل ڪري؟ اها ڳالهه نوٽ ڪرڻ گهرجي ته هر شيء ايترو خراب ناهي: مکيه بادل ڪجهه قسم جي آزمائشي مدت مفت ۾ ڏين ٿا (پر توهان کي اڃا به ڪريڊٽ ڪارڊ نمبر جي ضرورت آهي - ۽ اهو لڳي ٿو ته هڪ ڊالر ان مان ڊيبٽ ڪيو ويندو. مون کي ياد ناهي ته جيڪڏهن بعد ۾ واپس ڪيو ويو.)

AI ML کان سواءِ اهو ايترو دلچسپ ناهي ته بوٽ-غريب-شاعر-ويور ٺاهڻ.

مون فيصلو ڪيو ته هڪ بوٽ ٺاهيو جيڪو مون کي ياد ڏياريندو (يا مون کي نه) ڊڪشنري مان انگريزي لفظن جي.
ڊيٽابيس سان ڀڄڻ کان بچڻ لاءِ، ڊڪشنري کي ٽيڪسٽ فائل ۾ محفوظ ڪيو ويندو ۽ دستي طور تي اپڊيٽ ڪيو ويندو.
انهي حالت ۾، ڪم جو ڪم بنيادي طور تي ظاهر ڪرڻ آهي، ۽ گهٽ ۾ گهٽ هڪ جزوي طور تي ختم ٿيل پيداوار نه آهي.

2. ڪوشش ڪري رهيا آهيو ته پهريون ڀيرو ڇا ۽ ڪيئن

اچو ته هڪ فولڊر C:poshtranslate ٺاهي
پهرين، اچو ته ڏسون ته اسان وٽ ڪهڙي قسم جو پاور شيل آهي، اچو ته ISE لانچ ڪريون Start-run ذريعي
powershell ise
يا انسٽال ٿيل پروگرامن ۾ پاور شيل ISE ڳولھيو.
لانچ کان پوء، عام طور تي واقف "ڪجهه قسم جو ايڊيٽر" کلي ويندو؛ جيڪڏهن ڪو ٽيڪسٽ فيلڊ نه آهي، ته توهان هميشه "فائل - نئون ٺاهيو" تي ڪلڪ ڪري سگهو ٿا.

اچو ته پاور شيل جو ورجن ڏسو - ٽيڪسٽ فيلڊ ۾ لکو:

get-host 

۽ F5 کي دٻايو.

پاور شيل محفوظ ڪرڻ جي آڇ ڪندو - ”جنهن اسڪرپٽ کي توهان هلائڻ وارا آهيو، محفوظ ٿي ويندي. myfirstbotBT100.

لانچ کان پوء، هيٺين ٽيڪسٽ ونڊو ۾ اسان هڪ ڊيٽا ٽيبل حاصل ڪندا آهيون:

Name             : Windows PowerShell ISE Host
Version          : 5.1.(и так далее)

مون وٽ 5.1 ڪجهه آهي، اهو ڪافي آهي. جيڪڏهن توهان وٽ پراڻي ونڊوز 7/8 آهي ته پوءِ ڪا وڏي ڳالهه ناهي - جيتوڻيڪ PowerShell کي ورزن 5 تائين اپڊيٽ ڪرڻ جي ضرورت پوندي - مثال طور. هدايتون.

ھيٺ ڏنل ڪمانڊ لائن ۾ Get-Date ٽائپ ڪريو، Enter کي دٻايو، وقت ڏسو، ڪمانڊ سان روٽ فولڊر ڏانھن وڃو
cd
۽ cls حڪم سان اسڪرين کي صاف ڪريو (نه، توهان کي rm استعمال ڪرڻ جي ضرورت ناهي)

هاڻي اچو ته چيڪ ڪريون ته ڇا ڪم ڪري ٿو ۽ ڪيئن - اچو ته ڪوڊ نه لکون، پر ٻه لائينون، ۽ سمجهڻ جي ڪوشش ڪريو ته اهي ڇا ڪندا آهن. اچو ته تبصرو ڪريون لڪير کي get-host سان # علامت سان ۽ ٿورو شامل ڪريو.

# Пример шаблона бота 
# get-host
<# это пример многострочного комментария #>
$TimeNow = Get-Date
$TimeNow

(ڪهڙي دلچسپ ڳالهه اها آهي ته هيبري تي ڪوڊ فارميٽنگ ڊراپ ڊائون لسٽ ۾ ٻه درجن آپشن آهن - پر پاور شيل اتي ناهي. ڊاس اتي آهي. پرل اتي آهي.)

۽ اچو ته GUI مان F5 يا ">" کي دٻائي ڪوڊ هلائيون.

اسان هيٺ ڏنل پيداوار حاصل ڪندا آهيون:

Saturday, December 8, 2019 21:00:50 PM (или что-то типа)

هاڻي اچو ته انهن ٻن لائينن ۽ ڪجهه دلچسپ نقطن تي نظر وجهون ته جيئن مستقبل ۾ ان طرف واپس نه وڃون.

پاسڪل (۽ نه رڳو) جي برعڪس، پاور شيل پاڻ اهو طئي ڪرڻ جي ڪوشش ڪري ٿو ته ڪهڙي قسم کي متغير کي تفويض ڪرڻو آهي؛ ان بابت وڌيڪ تفصيل مضمون ۾ لکيل آهن پروگرامنگ ٻولين ۾ ٽائپنگ تي تعليمي پروگرام
تنهن ڪري، هڪ $TimeNow متغير ٺاهڻ ۽ ان کي موجوده تاريخ ۽ وقت (Get-Date) جي قيمت مقرر ڪرڻ سان، اسان کي تمام گهڻو پريشان ٿيڻ جي ضرورت ناهي ته ڪهڙي قسم جي ڊيٽا هوندي.

سچ پچ، هي جهالت شايد دير سان ڏکائي سگهي ٿي، پر اهو بعد ۾ آهي. ھيٺ ڏنل متن ۾ ھڪڙو مثال ھوندو.
اچو ته ڏسون ته اسان کي ڇا مليو. اچو ته عمل ڪريون (ڪمانڊ لائن تي)

$TimeNow | Get-member

۽ ناقابل فهم متن جو صفحو حاصل ڪريو

ناقابل فهم متن جو مثال نمبر 1

PS C:> $TimeNow | Get-member
   TypeName: System.DateTime
Name                 MemberType     Definition                                                                                                                                       
----                 ----------     ----------                                                                                                                                       
Add                  <b>Method         </b>datetime Add(timespan value)  
..
DisplayHint          NoteProperty   DisplayHintType DisplayHint=DateTime                                                                                                             
Date                 <b>Property       </b>datetime Date {get;}                                                                                                                             
Year                 Property       int Year {get;}   
..                                                                                                                               
DateTime             ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode -Version 1; $this.DisplayHint }) -ieq  "Date")...                                         

جئين توهان ڏسي سگهو ٿا، قسم جو هڪ متغير TypeName: System.DateTime ڪيترن ئي طريقن سان ٺاهيو ويو آهي (ان جي معني ۾ اسان هن متغير اعتراض سان ڇا ڪري سگهون ٿا) ۽ ملڪيت.

اچو ته سڏين $TimeNow.DayOfYear - اسان کي سال جي ڏينهن جو تعداد حاصل ڪري.
اچو ته سڏين $TimeNow.DayOfYear | Get-Member - اسان حاصل ڪريون ٿا TypeName: System.Int32 ۽ طريقن جو هڪ گروپ.
اچو ته سڏين $TimeNow.ToUniversalTime() - ۽ وقت حاصل ڪريو UTC ۾

ڊيبگر

ڪڏهن ڪڏهن ائين ٿئي ٿو ته اهو ضروري آهي ته ڪنهن پروگرام کي هڪ خاص لڪير تائين هلائڻ ۽ ان وقت پروگرام جي حالت ڏسو. هن مقصد لاء، ISE هڪ ڊيبگ فنڪشن آهي - ٽوگل برڪ پوائنٽ
وچ ۾ ڪنهن جاءِ تي هڪ بريڪ پوائنٽ رکو، انهن ٻن لائينن کي هلايو ۽ ڏسو ته وقفو ڪيئن ٿو لڳي.

3. ٽيليگرام بوٽ سان رابطي کي سمجھڻ

يقينن، اڃا به وڌيڪ ادب bot سان رابطي تي لکيو ويو آهي، تمام getpush ۽ انهي سان گڏ، پر نظريي جي مسئلي کي اختياري سمجهي سگهجي ٿو.

اسان جي صورت ۾ ضروري آهي:

  • خط و ڪتابت ۾ ڪجهه موڪلڻ سکو
  • خط و ڪتابت مان ڪجهه حاصل ڪرڻ سکيو

3.1 خط و ڪتابت ۾ ڪا شيءِ موڪلڻ ۽ ان مان وصول ڪرڻ سکڻ

ٿورڙو ڪوڊ - حصو 3

Write-output "This is part 3"
$MyToken = "1234544311:AbcDefNNNNNNNNNNNNN"
$MyChatID = "123456789"
$MyProxy = "http://1.2.3.4:5678" 

$TimeNow = Get-Date
$TimeNow.ToUniversalTime()
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$BotVersion = "BT102"

$MyText01 = "Life is directed motion - " + $TimeNow

$URL4SEND = "https://api.telegram.org/bot$MyToken/sendMessage?chat_id=$MyChatID&text=$MyText01"

Invoke-WebRequest -Uri $URL4SEND

۽ روسي فيڊريشن ۾ هن نقطي تي اسان کي غلطي ملي ٿي ريموٽ سرور سان ڳنڍڻ جي قابل ناهي.

يا اسان ان کي حاصل نه ڪندا آهيون - ٽيلي ڪام آپريٽر تي منحصر آهي ۽ ڇا پراکسي ترتيب ڏنل آهي ۽ ڪم ڪري رهيو آهي
خير، باقي رهي ٿو هڪ پراکسي شامل ڪرڻ. مهرباني ڪري نوٽ ڪريو ته هڪ غير انڪرپٽ ٿيل ۽ عام طور تي دوکي وارو پراکسي استعمال ڪرڻ توهان جي صحت لاءِ انتهائي خطرناڪ آهي.

ڪم ڪندڙ پراکسي ڳولڻ جو ڪم تمام ڏکيو نه آهي - اڪثر شايع ٿيل http پراکسي ڪم ڪن ٿا. مان سمجهان ٿو ته پنجون مون لاء ڪم ڪيو.

پراکسي استعمال ڪندي نحو:

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

جيڪڏهن توهان هڪ بوٽ سان توهان جي چيٽ ۾ هڪ پيغام وصول ڪيو، پوء سڀ ڪجهه ٺيڪ آهي، توهان اڳتي وڌائي سگهو ٿا. جيڪڏهن نه، ڊيبگنگ جاري رکو.

توهان ڏسي سگهو ٿا ته توهان جي $URL4SEND اسٽرنگ ڇا ۾ بدلجي ٿي ۽ برائوزر ۾ ان جي درخواست ڪرڻ جي ڪوشش ڪريو، جهڙوڪ:

$URL4SEND2 = '"'+$URL4SEND+'"'
start chrome $URL4SEND2 

3.2. اسان چيٽ ۾ ”ڪجهه“ لکڻ سکيو، هاڻي اچو ته ان کي پڙهڻ جي ڪوشش ڪريون

اچو ته 4 وڌيڪ لائينون شامل ڪيون ۽ ڏسو ته اندر ڇا آھي | ذريعي ميمبر ٿيڻ

$URLGET = "https://api.telegram.org/bot$MyToken/getUpdates"
$MyMessageGet = Invoke-WebRequest -Uri $URLGET -Method Get -Proxy $MyProxy
Write-Host "Get-Member"
$MyMessageGet | Get-Member

سڀ کان وڌيڪ دلچسپ شيء اسان کي ڏني وئي آهي

Content           Property   string Content {get;}  
ParsedHtml        Property   mshtml.IHTMLDocument2 ParsedHtml {get;}                                    
RawContent        Property   string RawContent {get;set;}

اچو ته ڏسون انهن ۾ ڇا آهي:

Write-Host "ParsedHtml"
$MyMessageGet.ParsedHtml # тут интересное
Write-Host "RawContent"
$MyMessageGet.RawContent # и тут интересное, но еще к тому же и читаемое. 
Write-Host "Content"
$MyMessageGet.Content

جيڪڏھن سڀ ڪجھ توھان لاءِ ڪم ڪري، توھان کي ھڪڙي ڊگھي لائن ملندي جيئن:

{"ok":true,"result":[{"update_id":12345678,
"message":{"message_id":3,"from":{"id"

خوشقسمتيء سان، اڳ ۾ شايع ٿيل مضمون ۾ ٽيليگرام بوٽ سسٽم ايڊمنسٽريٽر لاء هي لائن (ها، $MyMessageGet.RawContent | جي مطابق get-member آهي System.String)، اڳ ۾ ئي جدا ڪيو ويو آهي.

4. پروسيس ڪريو جيڪو توهان وصول ڪيو (اسان اڳ ۾ ئي ڄاڻون ٿا ته ڪا شيء ڪيئن موڪلجي)

جيئن اڳ ۾ لکيو ويو آهي هتيسڀ کان وڌيڪ ضروري شيون مواد ۾ آهن. اچو ته ان تي هڪ ويجهي نظر رکون.

پهرين، اسان ويب انٽرفيس يا فون تان بوٽ ڏانهن ڪجهه وڌيڪ جملا لکنداسين

/message1
/message2
/message3

۽ برائوزر ذريعي ان پتي تي ڏسو جيڪو $URLGET متغير ۾ ٺهيل هو.

اسان ڪجھه ڏسندا سين جيئن:

{"ok":true,"result":[{"update_id":NNNNNNN,
"message":{"message_id":10, .. "text":"/message1"
"message":{"message_id":11, .. "text":"/message2 
"message":{"message_id":12, .. "text":"/message3 

هي ڇا آهي؟ ڪجھ پيچيده شيون شيون جي صفن مان جن ۾ آخر کان آخر تائين پيغام جي سڃاڻپ ڪندڙ، چيٽ جي سڃاڻپ ڪندڙ، موڪلڻ جي سڃاڻپ ڪندڙ ۽ ٻيون گھڻيون معلومات شامل آھن.

بهرحال، اسان کي اهو ڄاڻڻ جي ضرورت ناهي ته "هي ڪهڙي قسم جو اعتراض آهي" - ڪم جو حصو اڳ ۾ ئي اسان لاء ڪيو ويو آهي. اچو ته ڏسون اندر ڇا آهي:

وصول ٿيل پيغام پڙهڻ يا حصو 4

Write-Host "This is part 4" <# конечно эта строка нам не нужна в итоговом тексте, но по ней удобно искать. #> 

$Content4Pars01 = ConvertFrom-Json $MyMessageGet.Content
$Content4Pars01 | Get-Member
$Content4Pars01.result
$Content4Pars01.result[0]
$Content4Pars01.result[0] | Get-Member
$Content4Pars01.result[0].update_id
$Content4Pars01.result[0].message
$Content4Pars01.result[0].message.text
$Content4Pars01.result[1].message.text
$Content4Pars01.result[2].message.text

5. هاڻي اسان کي ان بابت ڇا ڪرڻ گهرجي؟

اچو ته نتيجي واري فائل کي myfirstbotBT105 جي نالي سان محفوظ ڪريون يا جيڪو به توهان کي پسند اچي، عنوان تبديل ڪريو ۽ تبصرو ڪريو سڀ اڳ ۾ لکيل ڪوڊ ذريعي

<#start comment 105 end comment 105#>

هاڻي اسان کي اهو فيصلو ڪرڻو آهي ته لغت ڪٿي حاصل ڪجي (چڱو، ڪٿي - فائل ۾ ڊسڪ تي) ۽ اهو ڇا ٿيندو.

يقينا، توهان لکت جي متن ۾ هڪ وڏي لغت لکي سگهو ٿا، پر اهو مڪمل طور تي نقطي جي ڀرسان آهي.
سو اچو ته ڏسون ته ڪهڙي پاور شيل ڪم ڪري سگهي ٿي عام طور تي.
عام طور تي، هن کي پرواه ناهي ته ڪهڙي فائل سان ڪم ڪيو وڃي، اهو اسان لاء ڪو مسئلو ناهي.
اسان وٽ هڪ اختيار آهي: txt (توهان ڪري سگهو ٿا، پر ڇو)، csv، xml.
ڇا اسان سڀني کي ڏسي سگهون ٿا؟ اچو ته سڀني کي ڏسون.
اچو ته هڪ ڪلاس ٺاهيون MyVocabClassExample1 ۽ هڪ متغير $MyVocabExample1
مون نوٽ ڪيو ته ڪلاس $ کان سواء لکيل آهي

ڪجهه ڪوڊ نمبر 5

write-host "This is part 5"
class MyVocabClassExample1 {
    [string]$Original  # слово
    [string]$Transcript
    [string]$Translate
    [string]$Example
    [int]$VocWordID # очень интересный момент. Использование int с его ограничениями может порой приводить к диким последствиям, для примера - недавний случай с SSD HPE. Изначально я не стал добавлять этот элемент, потом все же дописал и закомментировал.
    }

$MyVocabExample1 = [MyVocabClassExample1]::new()
$MyVocabExample1.Original = "Apple"
$MyVocabExample1.Transcript = "[ ˈapəl ]"
$MyVocabExample1.Translate = "Яблоко"
$MyVocabExample1.Example = "An apple is a sweet, edible fruit produced by an apple tree (Malus domestica)"
# $MyVocabExample1.$VocWordID = 1

$MyVocabExample2 = [MyVocabClassExample1]::new()
$MyVocabExample2.Original = "Pear"
$MyVocabExample2.Transcript = "[ pe(ə)r ]"
$MyVocabExample2.Translate = "Груша"
$MyVocabExample2.Example = "The pear (/ˈpɛər/) tree and shrub are a species of genus Pyrus"
# $MyVocabExample1.$VocWordID = 2

اچو ته ان کي استعمال ڪندي فائلن ۾ لکڻ جي ڪوشش ڪريون نموني.

ڪجھ ڪوڊ #5.1

Write-Host $ScriptDir # надеюсь $ScriptDir вы не закомментировали 
$MyFilenameExample01 = $ScriptDir + "Example01.txt"
$MyFilenameExample02 = $ScriptDir + "Example02.txt"
Write-Host $MyFilenameExample01
Out-File  -FilePath $MyFilenameExample01 -InputObject $MyVocabExample1

Out-File  -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2
notepad $MyFilenameExample01

- ۽ اسان کي لائن تي غلطي ملي ٿي Out-File -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2.

هو شامل ڪرڻ نٿو چاهي، آه، ڇا شرم آهي.

$MyVocabExample3AsArray = @($MyVocabExample1,$MyVocabExample2)
Out-File  -FilePath $MyFilenameExample02 -InputObject $MyVocabExample3AsArray
notepad $MyFilenameExample02

اچو ته ڏسون ڇا ٿو ٿئي. عظيم متن ڏسڻ - پر ان کي واپس ڪيئن برآمد ڪجي؟ ڇا مون کي ڪجهه قسم جا متن جدا ڪندڙ متعارف ڪرائڻ گهرجن، جهڙوڪ ڪاما؟

۽ آخر ۾ توهان حاصل ڪيو "ڪاما-جدا ڪيل قدر (CSV) فائل A انتظار ڪريو.
#

$MyFilenameExample03 = $ScriptDir + "Example03.csv"
$MyFilenameExample04 = $ScriptDir + "Example04.csv"
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample1 
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample2 -Append 
Export-Csv  -Path $MyFilenameExample04 -InputObject $MyVocabExample3AsArray 

جيئن ته ڏسڻ ۾ آسان آهي، MS خاص طور تي ان جي منطق جي لحاظ کان ڌار نه آهي؛ ساڳئي طريقي سان، هڪ صورت ۾ -FilePath استعمال ڪيو ويندو آهي، ٻئي ۾ -Path.

ان کان سواء، ٽئين فائل ۾ روسي ٻولي غائب ٿي وئي، چوٿين فائل ۾ اهو نڪتو ... خير، ڪجهه ٿيو. #TYPE System.Object[] 00
# "ڳڻپ"،" ڊگھائي"،" ڊگھي ڊگھائي"،" درجه بندي"،" SyncRoot"، "IsReadonly"، "Is FixedSize"، "Is Synchronized"
#
اچو ته ان کي ٿورو ٻيهر لکون:

Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample1 -Encoding Unicode
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample2 -Append -Encoding Unicode
notepad $MyFilenameExample03
notepad $MyFilenameExample04

اهو لڳي ٿو مدد ڪئي آهي، پر مون کي اڃا تائين فارميٽ پسند نه آهي.

مان خاص طور تي اهو پسند نٿو ڪري سگهان ته مان ڪنهن شئي مان لائنون سڌو سنئون فائل ۾ نه وجهي سگهان.
رستي ۾، جڏهن کان اسان فائلن تي لکڻ شروع ڪيو، ڇا اسان هڪ شروعاتي لاگ رکڻ شروع ڪري سگهون ٿا؟ اسان وٽ وقت هڪ متغير آهي، اسان فائل جو نالو مقرر ڪري سگهون ٿا.

اهو سچ آهي ته اڃان تائين لکڻ لاءِ ڪجهه به ناهي، پر توهان سوچي سگهو ٿا ته لاگز کي ڪيئن بهتر طريقي سان گھمايو وڃي.
اچو ته ڪوشش ڪريون xml لاءِ.

ڪجھ xml

$MyFilenameExample05 = $ScriptDir + "Example05.xml"
$MyFilenameExample06 = $ScriptDir + "Example06.xml"
Export-Clixml  -Path $MyFilenameExample05 -InputObject $MyVocabExample1 
Export-Clixml  -Path $MyFilenameExample05 -InputObject $MyVocabExample2 -Append -Encoding Unicode
Export-Clixml  -Path $MyFilenameExample06 -InputObject $MyVocabExample3AsArray
notepad $MyFilenameExample05
notepad $MyFilenameExample06

ايڪس ايم ايل تي ايڪسپورٽ ڪرڻ جا ڪيترائي فائدا آھن - پڙھڻ جي قابليت، پوري شئي جي برآمد، ۽ اپپنڊ انجام ڏيڻ جي ڪا ضرورت ناهي.

اچو ته ڪوشش ڪريو xml فائل پڙهو.

xml کان ٿورو پڙهڻ

$MyFilenameExample06 = $ScriptDir + "Example06.xml"
$MyVocabExample4AsArray = Import-Clixml -Path $MyFilenameExample06
# $MyVocabExample4AsArray 
# $MyVocabExample4AsArray[0]
# и немного о совершенно неочевидных нюансах. Powershell время от времени ведет себя не так, как вроде бы как бы стоило бы ожидать бы.
# например у меня эти два вывода отличаются
# Write-Output $MyVocabExample4AsArray 
# write-host $MyVocabExample4AsArray 

اچو ته ڪم ڏانهن واپس وڃو. اسان هڪ ٽيسٽ فائل لکيو، ان کي پڙهو، اسٽوريج فارميٽ صاف آهي، جيڪڏهن ضروري هجي ته، توهان لائنن کي شامل ڪرڻ ۽ ختم ڪرڻ لاء هڪ الڳ ننڍڙو فائيل ايڊيٽر لکي سگهو ٿا.

مان توهان کي ياد ڏيان ٿو ته اهو ڪم هڪ ننڍڙو ٽريننگ بوٽ ٺاهڻ هو.

ڪم جي شڪل: مان موڪليان ٿو ”مثال“ ڪمانڊ بوٽ ڏانهن، بوٽ مون کي موڪلي ٿو بي ترتيب چونڊيل لفظ ۽ ٽرانسڪرپشن، ۽ 10 سيڪنڊن کان پوءِ مون کي ترجمو ۽ تبصرو موڪلي ٿو. اسان ڄاڻون ٿا ته ڪمانڊ ڪيئن پڙهجن، اسان اهو پڻ سکڻ چاهيون ٿا ته ڪيئن خودڪار طريقي سان چونڊيو ۽ پراڪسز کي چيڪ ڪريو، ۽ ميسيج ڳڻپيندڙن کي وساريو وڃي.

اچو ته اڳ ۾ ڏنل هر شيءِ کي غير ضروري سمجھي تبصرو ڪريون، هاڻي غير ضروري مثالن کي txt ۽ csv سان تبصرو ڪريون، ۽ فائل کي B106 ورزن طور محفوظ ڪريون.

ها، ها. اچو ته بوٽ ڏانهن ڪجهه موڪلون.

6. ڊسپيچ کان افعال ۽ وڌيڪ

استقبال کي پروسيس ڪرڻ کان پهريان، توهان کي "گهٽ ۾ گهٽ ڪجهه" موڪلڻ لاء هڪ فنڪشن ٺاهڻ جي ضرورت آهي هڪ ٽيسٽ پيغام کان سواء.

يقينن، مثال ۾ اسان وٽ صرف هڪ موڪلڻ ۽ صرف هڪ پروسيسنگ هوندي، پر جيڪڏهن اسان کي ساڳيو ڪم ڪيترائي ڀيرا ڪرڻو پوندو؟

هڪ فنڪشن لکڻ آسان آهي. تنهن ڪري، اسان وٽ هڪ قسم جي شئي جو هڪ متغير آهي $MyVocabExample4AsArray، فائل مان پڙهي، ٻن عنصرن جي هڪ صف جي صورت ۾.
اچو ته پڙهون.

ساڳي ئي وقت، اسين گھڙي سان ڊيل ڪنداسين؛ اسان کي بعد ۾ ان جي ضرورت پوندي (حقيقت ۾، هن مثال ۾ اسان کي ان جي ضرورت نه هوندي :)

ڪجھ ڪوڊ #6.1

Write-Output "This is Part 6"
$Timezone = (Get-TimeZone)
IF($Timezone.SupportsDaylightSavingTime -eq $True){
    $TimeAdjust =  ($Timezone.BaseUtcOffset.TotalSeconds + 3600) } # приведенное время
    ELSE{$TimeAdjust = ($Timezone.BaseUtcOffset.TotalSeconds) 
    }
    
function MyFirstFunction($SomeExampleForFunction1){
$TimeNow = Get-Date
$TimeNow.ToUniversalTime()
# $MyText02 = $TimeNow + " " + $SomeExampleForFunction1 # и вот тут мы получим ошибку
$MyText02 = $SomeExampleForFunction1 + " " + $TimeNow # а тут не получим, кто догадается почему - тот молодец.

$URL4SendFromFunction = "https://api.telegram.org/bot$MyToken/sendMessage?chat_id=$MyChatID&text=$MyText02"
Invoke-WebRequest -Uri $URL4SendFromFunction -Proxy $MyProxy
}

جئين توهان آساني سان ڏسي سگهو ٿا، فنڪشن ڪال ڪري ٿو $MyToken ۽ $MyChatID، جيڪي اڳ ۾ سخت ڪوڊ ٿيل هئا.

ائين ڪرڻ جي ڪا ضرورت ناهي، ۽ جيڪڏهن $MyToken هر بوٽ لاءِ هڪ آهي، ته پوءِ $MyChatID چيٽ جي لحاظ کان تبديل ٿي ويندو.

بهرحال، جيئن ته هي هڪ مثال آهي، اسان ان کي هن وقت لاء نظر انداز ڪنداسين.

جيئن ته $MyVocabExample4AsArray هڪ صف نه آهي، جيتوڻيڪ اهو هڪ جهڙو آهي، پوءِ توهان صرف ان کي وٺي نه ٿا سگهو ان جي ڊيگهه جي درخواست.

هڪ دفعو ٻيهر اسان کي ڪجهه ڪرڻو پوندو جيڪو نه ٿو ڪري سگهجي - پيراشوٽ ڪوڊ مطابق نه - ان کي وٺو ۽ ڳڻيو

ڪجھ ڪوڊ #6.2

$MaxRandomExample = 0 
foreach ($Obj in $MyVocabExample4AsArray) {
$MaxRandomExample ++
}
Write-Output $MaxRandomExample
$RandomExample = Get-Random -Minimum 0 -Maximum ($MaxRandomExample)
$TextForExample1 = $MyVocabExample4AsArray[$RandomExample].Original
# MyFirstFunction($TextForExample1)
# или в одну строку
# MyFirstFunction($MyVocabExample4AsArray[Get-Random -Minimum 0 -Maximum ($MaxRandomExample -1)].Example)
# Угадайте сами, какой пример легче читается посторонними людьми.

عليكم دلچسپ خصوصيت. اچو ته چئو ته اسان حاصل ڪرڻ چاهيون ٿا 0 يا 1 (اسان وٽ صرف ٻه عنصر آهن صف ۾). جڏهن حدون مقرر ڪيون وينديون 0..1، ڇا اسان حاصل ڪنداسين "1"؟
نه - اسان اهو حاصل نه ڪنداسين، اسان وٽ هڪ خاص مثال آهي مثال 2: 0 ۽ 99 جي وچ ۾ بي ترتيب انٽيجر حاصل ڪريو Get-Random -Maximum 100
تنهن ڪري، 0..1 لاءِ اسان کي سائيز 0..2 مقرر ڪرڻ جي ضرورت آهي، وڌ ۾ وڌ عنصر نمبر = 1 سان.

7. ايندڙ پيغامن جي پروسيسنگ ۽ وڌ ۾ وڌ قطار جي ڊيگهه

اسان اڳي ڪٿي بيٺا هئاسين؟ اسان وٽ حاصل ڪيل متغير $MyMessageGet آهي
۽ ان مان حاصل ڪيل $Content4Pars01، جنهن مان اسان کي دلچسپي آهي Content4Pars01.result صف جي عناصرن ۾

$Content4Pars01.result[0].update_id
$Content4Pars01.result[0].message
$Content4Pars01.result[0].message.text

اچو ته bot /message10، /message11، /message12، /word ۽ ٻيهر /word ۽ /hello موڪليو.
اچو ته ڏسو ته اسان کي ڇا مليو:

$Content4Pars01.result[0].message.text
$Content4Pars01.result[2].message.text

اچو ته حاصل ڪيل هر شي ذريعي وڃو ۽ هڪ جواب موڪليو جيڪڏهن پيغام / لفظ هو
تعمير جو ڪيس، جيڪو ڪجهه بيان ڪري ٿو if-elseif، سڏيو ويندو آهي پاور شيل ۾ سوئچ ذريعي. ساڳئي وقت، هيٺ ڏنل ڪوڊ استعمال ڪري ٿو -وائلڊ ڪارڊ ڪي، جيڪو مڪمل طور تي غير ضروري ۽ نقصانڪار آهي.

ڪجھ ڪوڊ #7.1

Write-Output "This is part 7"
Foreach ($Result in $Content4Pars01.result) # Да, можно сделать быстрее 
 { 
    switch -wildcard ($Result.message.text) 
            {
            "/word" {MyFirstFunction($TextForExample1)}
            }
}

اچو ته اسڪرپٽ کي ٻه ڀيرا هلون. اسان هر عمل جي ڪوشش لاء ٻه ڀيرا ساڳيو لفظ حاصل ڪنداسين، خاص طور تي جيڪڏهن اسان بي ترتيب جي عمل ۾ غلطي ڪئي.

پر روڪيو. اسان نه موڪليو / لفظ ٻيهر، پوء ڇو پيغام ٻيهر پروسيس ڪيو پيو وڃي؟

بوٽ ڏانهن پيغام موڪلڻ جي قطار جي هڪ محدود ڊيگهه آهي (100 يا 200 پيغام، منهنجو خيال آهي) ۽ دستي طور تي صاف ڪيو وڃي.

اهو يقينن دستاويزن ۾ بيان ڪيو ويو آهي، پر توهان کي پڙهڻ گهرجي!

ھن حالت ۾، اسان کي ضرورت آھي ?chat_id پيٽرول، ۽ &timeout، &limit، &parse_mode=HTML ۽ &disable_web_page_preview=true اڃا ضرورت ناھي.

لاء دستاويز telegram api هتي آهي
اهو اڇو ۽ انگريزي ۾ چوي ٿو:
پهرين اپڊيٽ جي سڃاڻپ ڪندڙ کي واپس ڪيو وڃي. اڳ ۾ مليل تازه ڪارين جي سڃاڻپ ڪندڙ جي وچ ۾ سڀ کان وڌيڪ هڪ کان وڌيڪ هجڻ گهرجي. ڊفالٽ طور، تازه ڪاريون سڀ کان پهريان کان شروع ٿينديون
بغير تصديق ٿيل اپڊيٽ واپس ڪيا ويا آهن. هڪ اپڊيٽ جي تصديق ڪئي ويندي آهي جيئن ئي getUpdates سڏيو ويندو آهي هڪ سان اوٽ اعلي ان جي update_id کان. ناڪاري آفسيٽ بيان ڪري سگھجي ٿو تازه ڪاريون حاصل ڪرڻ لاءِ -آفيس اپڊيٽ کان شروع ٿيندڙ تازه ڪارين جي قطار جي آخر کان. سڀ پويون تازه ڪاريون وساري وينديون.

اچو ته ڏسون:

$Content4Pars01.result[0].update_id
$Content4Pars01.result[1].update_id 
$Content4Pars01.result | select -last 1
($Content4Pars01.result | select -last 1).update_id

ها، ۽ اسان ان کي ري سيٽ ڪنداسين ۽ فنڪشن کي ٿورڙو ٻيهر لکنداسين. اسان وٽ ٻه آپشن آهن - مڪمل پيغام کي فنڪشن ڏانهن منتقل ڪريو ۽ ان کي مڪمل طور تي فنڪشن ۾ پروسيس ڪريو، يا صرف پيغام جي ID ڏيو ۽ ان کي ري سيٽ ڪريو. مثال طور، ٻيو سادو ڏسڻ ۾ اچي ٿو.

اڳي، اسان جي "سڀني نياپا" سوال اسٽرنگ وانگر نظر اچن ٿا

$URLGET = "https://api.telegram.org/bot$MyToken/getUpdates"

۽ اهو نظر ايندو

$LastMessageId = ($Content4Pars01.result | select -last 1).update_id
$URLGET1 = "https://api.telegram.org/bot$mytoken/getUpdates?offset=$LastMessageId&limit=100" 
$MyMessageGet = Invoke-WebRequest -Uri $URLGET1 -Method Get -Proxy $MyProxy 

ڪو به توهان کي منع نٿو ڪري ته سڀ کان پهريان سڀئي پيغام وصول ڪريو، انهن تي عمل ڪريو، ۽ صرف ڪامياب پروسيسنگ جي درخواست کان پوء غير تصديق ٿيل -> تصديق ٿيل.

سڀ پروسيسنگ مڪمل ٿيڻ کان پوءِ تصديق کي ڪال ڪرڻ جو مطلب ڇو آهي؟ عمل جي وچ ۾ هڪ ناڪامي ممڪن آهي، ۽ جيڪڏهن هڪ مفت چيٽ بٽ جي مثال لاء، هڪ واحد پيغام غائب ڪجهه خاص ناهي، پوء جيڪڏهن توهان ڪنهن جي تنخواه يا ڪارڊ ٽرانزيڪشن تي عمل ڪري رهيا آهيو، نتيجو خراب ٿي سگهي ٿو.

ڪوڊ جون ڪجهه وڌيڪ لائينون

$LastMessageId = ($Content4Pars01.result | select -last 1).update_id  #ошибку в этом месте предполагается исправить самостоятельно. 
$URLGET1 = "https://api.telegram.org/bot$mytoken/getUpdates?offset=$LastMessageId&limit=100" 
Invoke-WebRequest -Uri $URLGET1 -Method Get -Proxy $MyProxy

8. نتيجي جي بدران

بنيادي ڪم - پيغام پڙهڻ، قطار کي ري سيٽ ڪرڻ، فائل مان پڙهڻ ۽ فائل ڏانهن لکڻ مڪمل ۽ ڏيکاريل آهن.

ڪرڻ لاءِ صرف چار شيون باقي آهن:

  • چيٽ ۾ درخواست جو صحيح جواب موڪلڻ
  • ڪنهن به چيٽ تي جواب موڪلڻ جنهن ۾ بوٽ شامل ڪيو ويو
  • هڪ لوپ ۾ ڪوڊ لڳائڻ
  • ونڊوز شيڊيولر مان بوٽ لانچ ڪرڻ.

اهي سڀئي ڪم سادو آهن ۽ آساني سان مڪمل ڪري سگھجن ٿا دستاويزن کي پڙهڻ سان پيرا ميٽرز بابت
سيٽ-ExecutionPolicy غير محدود ۽ -ExecutionPolicy bypass
فارم جو چڪر

$TimeToSleep = 3 # опрос каждые 3 секунды
$TimeToWork = 10 # минут
$HowManyTimes = $TimeToWork*60/$TimeToSleep # счетчик для цикла
$MainCounter = 0
for ($MainCounter=0; $MainCounter -le $HowManyTimes) {
sleep $TimeToSleep
$MainCounter ++

هر ڪنهن جي مهرباني جنهن پڙهي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو