Powershell တွင် 7-9 တန်းကျောင်းသူလေးများအတွက် အရိုးရှင်းဆုံး တယ်လီဂရမ် bot ၏ နမူနာပုံစံ

သူငယ်ချင်းတစ်ယောက်နဲ့ စကားစမြည်ပြောနေစဉ်မှာ ၈ တန်းကနေ ၁၀ တန်းအထိ ကလေးတွေကို သူတို့ရဲ့ကျောင်းမှာ ပရိုဂရမ်ရေးနည်းကို လုံးဝမသင်ပေးဘူးဆိုတာ ရုတ်တရက် သိလိုက်ရတယ်။ Word၊ Excel နှင့် အားလုံး။ လိုဂိုမရှိပါ၊ Pascal ပင်မဟုတ်ပါ၊ Excel အတွက် VBA ပင်မရှိပါ။

အရမ်းအံ့သြသွားတယ်၊ အင်တာနက်ကိုဖွင့်ပြီးဖတ်ဖို့ တက်သွားတယ်၊
ပရိုဖိုင်ကျောင်း၏ တာဝန်များထဲမှ တစ်ခုသည် သတင်းအချက်အလက် လူ့အဖွဲ့အစည်း၏ အခြေအနေများနှင့် ကိုက်ညီသော မျိုးဆက်သစ်များ၏ ပညာရေးကို ပံ့ပိုးကူညီရန် ဖြစ်သည်။
ဤသင်တန်းသည် Pascal ပရိုဂရမ်းမင်းဘာသာစကား၏ အခြေခံတည်ဆောက်မှုများတွင် ကျောင်းသားများ၏ အသိပညာကို လက်တွေ့တွင် စုစည်းနိုင်စေမည်ဖြစ်သည်။ (၂၀၁၇ ခုနှစ်အတွက် အားကစားရုံအချို့ အစီအစဉ်မှ)

ရလဒ်အနေနဲ့၊ နာရီအနည်းငယ်ကြာပြီး “ကျောင်းသူလေးတွေအတွက် ရိုးရှင်းတဲ့ ဘော့တ်တစ်ခုဖန်တီးနည်း” ဥပမာတစ်ခုကို ပုံထုတ်ဖို့ ဆုံးဖြတ်လိုက်တယ်။

ဖြတ်တောက်မှုအောက်တွင်၊ Powershell တွင် အခြားသော ရိုးရှင်းသော ဘော့တ်များရေးနည်းနှင့် ၎င်းကို webhooks၊ အဖြူရောင် IP များ၊ သီးခြားဆာဗာများ၊ cloud တွင် ဖြန့်ကျက်နိုင်သော virtual machine များနှင့် အခြားအရာများ - ပုံမှန်အိမ်သုံး PC တွင် ပုံမှန် Windows သုံးသည့် PC တွင် မသုံးဘဲ အလုပ်လုပ်နိုင်စေရန်။

TLDR- သဒ္ဒါပိုင်းဆိုင်ရာနှင့် ဖြစ်ရပ်မှန်အမှားများပါရှိသော ငြီးငွေ့စရာကောင်းသော ဆောင်းပါးတစ်ပုဒ်၊ ဖတ်ရန်ဘာမျှမရှိ၊ ဟာသမရှိ၊ ပုံများမရှိပါ။

ဆောင်းပါးတွင် အသစ်အဆန်းမဟုတ်ပါ၊ စောစောကရေးခဲ့သော အရာအားလုံးနီးပါးသည် Habré တွင်ရှိပြီး၊ ဥပမာ၊ ဆောင်းပါးများတွင်ဖြစ်သည်။ လမ်းညွှန်ချက်များ- Telegram တွင် ဘော့တ်များဖန်တီးနည်း и စနစ်စီမံခန့်ခွဲသူအတွက် Telegram bot.
ထို့အပြင်၊ ဆောင်းပါးသည် အချိန်တိုင်း ပညာရေးဆိုင်ရာ စာပေများကို ရည်ညွှန်းခြင်းမပြုရန် တမင်တကာ မလိုအပ်တော့ပါ။ ဂိုဏ်း 4၊ PowerShell Deep Dives သို့မဟုတ် AWS Well-Architected Framework ၏ 5 Pillars of the XNUMX Pillars ဟု စာသားတွင် ဖော်ပြထားခြင်းမရှိပါ။

နိမိတ်ဖတ်မယ့်အစား ကျော်သွားနိုင်ပါတယ်။

လွတ်လွတ်လပ်လပ် ကျော်သွားလိုက်ပါ။2006 ခုနှစ်တွင် Microsoft သည် ထိုအချိန်က Windows XP၊ Vista နှင့် 1.0 ဆာဗာများအတွက် PowerShell 2003 ကို ထုတ်ဝေခဲ့သည်။ အချို့သောနည်းလမ်းများတွင်၊ ၎င်းသည် cmdbat scripts၊ vb scripts၊ Windows Script Host နှင့် JScript ကဲ့သို့သော အရာများကို အစားထိုးထားသည်။

ယခုအချိန်တွင်ပင်၊ PowerShell သည် သံသရာ၊ အတန်းများ၊ လုပ်ဆောင်ချက်များ၊ MS GUI ခေါ်ဆိုမှုများ ရှိနေသော်လည်း တစ်နေရာရာတွင် အသုံးပြုဆဲဖြစ်နိုင်ဖွယ်ရှိသည့် Delphi (သို့မဟုတ် အဟောင်းများ) အစား Logo ရွေးချယ်မှုများပြီးနောက် နောက်တစ်ဆင့်အဖြစ်သာ သတ်မှတ်နိုင်မည်ဖြစ်သည်။ Git နှင့်ပေါင်းစပ်ခြင်း။ ဒါပေါ်မှာ။

Powershell ကိုအတော်လေးရှားပါတယ်၊ PowerShell Core၊ VMware vSphere PowerCLI၊ Azure PowerShell၊ MS Exchange၊ Desired State Configuration ပုံစံမျိုးနဲ့သာ သင်တွေ့နိုင်ပါတယ်။ PowerShell ဝဘ်အသုံးပြုခွင့် နှင့် ပရိုဂရမ်များနှင့် လုပ်ဆောင်ချက်များကို အသုံးပြုခဲသော ဒါဇင် သို့မဟုတ် ဤမျှလောက်။ လွတ်မြောက်ခြင်းနှင့်အတူ ဒုတိယလေကို သူရနိုင်ပေမည်။ WSL2ဒါပေမယ့် အတိအကျတော့ မဟုတ်ပါဘူး။

Powershell မှာလည်း ကြီးမားတဲ့ အားသာချက် သုံးခုရှိပါတယ်။

  1. အတော်လေးရိုးရှင်းပါတယ်၊ အဲဒါနဲ့ပတ်သက်ပြီး စာပေနဲ့ ဥပမာတွေအများကြီးရှိပါတယ်၊ ဥပမာ ရုရှားဘာသာနဲ့တောင် Foreach အကြောင်း ဆောင်းပါးတစ်ပုဒ်က စာအုပ်ထဲကပါ။ PowerShell ကို နက်ရှိုင်းစွာ - () နှင့် { ခြားနားချက် }
  2. တည်းဖြတ်သူနှင့် လာပါသည်။ ISEWindows ဖြင့် ထုပ်ပိုးထားသည်။ အမှားရှာပြင်နည်းတစ်မျိုးပင် ရှိသေးသည်။
  3. အဲဒီကနေ အလွယ်တကူခေါ်တယ်။ ဂရပ်ဖစ် အင်တာဖေ့စ်တည်ဆောက်ခြင်းအတွက် အစိတ်အပိုင်းများ.

0.ဘိတ်.

ကျနော်တို့လိုအပ်ပါလိမ့်မည်:

  • Windows PC (ကျွန်တော့်မှာ Windows 10 ရှိပါတယ်)
  • အနည်းဆုံးအင်တာနက်အသုံးပြုခွင့်အချို့ (ဥပမာ NAT မှတဆင့်)
  • ကြေးနန်းစာကြည့်ခွင့်ကို ကန့်သတ်ထားသူများအတွက် - ဘရောက်ဆာတွင် ထည့်သွင်းပြီး ပြင်ဆင်ထားသော freegate၊ အချို့ခက်ခဲသောကိစ္စများတွင် Symple DNS Crypt နှင့်အတူ၊
  • ဖုန်းတွင် အလုပ်လုပ်သော တယ်လီဂရမ် အသုံးပြုသူ ရှိနေခြင်း။
  • အခြေခံသဘောတရားများကို နားလည်ခြင်း - variable, array, loop ဆိုတာဘာလဲ။

ဆောင်းပါးများကို ဖွင့်ဖတ်ပြီး၊ လမ်းညွှန်ချက်များ- Telegram တွင် ဘော့တ်များဖန်တီးနည်း и စနစ်စီမံခန့်ခွဲသူအတွက် Telegram bot

1. နောက်ထပ် စမ်းသပ်မှု bot တစ်ခုကို ဖန်တီးကြပါစို့။

ဒါကိုလူတိုင်းသိပြီးဖြစ်နေပြီမို့၊ သင်လည်း ကျော်သွားနိုင်ပါတယ်။အထက်ဖော်ပြပါ ဆောင်းပါးတွင် ဖော်ပြထားသည့်အတိုင်း - ပထမဆုံးအနေဖြင့် Telegram အတွက် bot တစ်ခု - ၎င်းသည် Telegram Bot API သို့ တောင်းဆိုမှုများ ပြုလုပ်နေသည့် သင့်ဘက်မှ လုပ်ဆောင်နေသည့် အက်ပ်တစ်ခုဖြစ်သည်။ ထို့အပြင် API သည် နားလည်နိုင်သည် - bot သည် သတ်မှတ်ထားသော URL ကို ကန့်သတ်ချက်များဖြင့် ဝင်ရောက်ကြည့်ရှုနိုင်ပြီး Telegram သည် JSON အရာဝတ္ထုဖြင့် တုံ့ပြန်သည်။

ဆက်စပ်ပြဿနာများ- အကယ်၍ သင်မသိသောနည်းလမ်းဖြင့် JSON အရာဝတ္ထုမှ ကုဒ်အချို့ကို ယူ၍ အကောင်အထည်ဖော်ရန်အတွက် တစ်နည်းတစ်ဖုံ ပေးပို့ပါက (ရည်ရွယ်ချက်မရှိဘဲ) ကုဒ်ကို သင့်အတွက် လုပ်ဆောင်မည်ဖြစ်သည်။

ဖန်တီးမှုလုပ်ငန်းစဉ်ကို အထက်ဖော်ပြပါ ဆောင်းပါးနှစ်ခုတွင် ဖော်ပြထားပြီး၊ သို့သော် ထပ်ခါထပ်ခါ ထပ်ခါတလဲလဲ - ကြေးနန်းစာထဲတွင် အဆက်အသွယ်များကိုဖွင့်ပါ၊ @botfather ကိုရှာပါ၊ သူ့ကိုပြောပါ / newbot ကိုပြောပါ၊ Botfortest12344321 bot တစ်ခုကိုဖန်တီးပါ၊ ၎င်းကို Mynext1234bot ဟုခေါ်ဆိုကြပါစို့၊ သီးသန့်သော့ဖြင့် မက်ဆေ့ချ်တစ်ခုရယူပါ။ 1234544311:AbcDefNNNNNNNNNNNN ကဲ့သို့

သော့ကို သိမ်းထားပြီး မစွန့်ပစ်ပါနှင့်။

ထို့နောက်တွင် သင်သည် bot ကို configure လုပ်နိုင်ပြီး၊ ဥပမာအားဖြင့် ၎င်းကို အဖွဲ့များသို့ထည့်ခြင်းကို တားမြစ်နိုင်သော်လည်း ပထမအဆင့်များတွင် ၎င်းသည် မလိုအပ်ပါ။

BotFather "/mybot" ကိုမေးပြီး တစ်စုံတစ်ခုကို မကြိုက်ပါက ဆက်တင်များကို ပြင်ကြပါစို့။

အဆက်အသွယ်များကို ထပ်မံဖွင့်ပါ၊ ထိုနေရာတွင် @Botfortest12344321 ကိုရှာပါ (@ ဖြင့်ရှာဖွေရန် မဖြစ်မနေလိုအပ်သည်)၊ "start" ကိုနှိပ်ပြီး bot "/Glory to the robots" သို့ စာရေးပါ။ အဆိုပါ / လိုအပ်သည်၊ ကိုးကားရန်မလိုအပ်ပါ။
ဘော့တ်သည် မည်သည်ကိုမျှ အဖြေပေးမည်မဟုတ်ပါ။

bot ကိုဖန်တီးပြီးကြောင်းစစ်ဆေးကြပါစို့ - ၎င်းကိုဖွင့်ပါ။

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNN/getMe
1234544311:AbcDefNNNNNNNNNNNN သည် ယခင်ရရှိထားသောသော့ဖြစ်ပြီး၊
ကြိုက်တဲ့ လိုင်းကို ရယူပါ။
{"ok":true,result":{""}}

ကျွန်ုပ်တို့တွင် ပထမဆုံး လျှို့ဝှက်စာပိုဒ် (တိုကင်) ရှိသည်။ ယခုကျွန်ုပ်တို့သည် bot နှင့် chat ID ၏ဒုတိယလျှို့ဝှက်နံပါတ်ကိုရှာဖွေရန်လိုအပ်သည်။ ချတ်၊ အဖွဲ့စသည်ဖြင့် တစ်ခုချင်းစီသည် တစ်ဦးချင်းဖြစ်ပြီး ၎င်း၏ကိုယ်ပိုင်နံပါတ် (တစ်ခါတစ်ရံတွင် ဖွင့်ထားသောအဖွဲ့များအတွက် အနှုတ်ဖြင့်)။ ဤနံပါတ်ကို သိရှိရန်အတွက်၊ ကျွန်ုပ်တို့သည် ဘရောက်ဆာတွင် တောင်းဆိုရန် လိုအပ်သည် (အမှန်တွင်၊ ၎င်းသည် ဘရောက်ဆာတွင် လုံးဝမလိုအပ်ပါ၊ သို့သော် ပိုမိုနားလည်သဘောပေါက်ရန်အတွက် ၎င်းနှင့်စတင်နိုင်သည်) လိပ်စာ (1234544311:NNNNNNNN နေရာတွင် သင့်တိုကင်နံပါတ်ဖြစ်သည်

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"

သင် chat တွင် bot ထံမှ မက်ဆေ့ချ်ကို လက်ခံရရှိပါက - ကောင်းပြီ၊ သင်သည် နောက်တစ်ဆင့်သို့ သွားပါ။

ထို့ကြောင့် (ဘရောက်ဆာမှတဆင့်) သင်သည် ပြဿနာများရှိသည့်နေရာကို အမြဲစစ်ဆေးနိုင်သည် - သင့်တွင် လင့်ခ်တစ်ခုဖန်တီးသည့်အခါ သို့မဟုတ် တစ်နေရာရာတွင် ဖုံးကွယ်ထားပြီး အလုပ်မလုပ်ပါ။

ဆက်မဖတ်ခင် ဘာတွေသိထားသင့်လဲ။

Telegram တွင် group chat အမျိုးအစားပေါင်းများစွာ (အဖွင့်၊ အပိတ်) ရှိသည်။ ဤချတ်များအတွက်၊ အချို့သောလုပ်ဆောင်ချက်များ (ဥပမာ၊ အိုင်ဒီ) သည် ကွဲပြားပြီး တစ်ခါတစ်ရံ ပြဿနာအချို့ကို ဖြစ်စေသည်။

ကျွန်ုပ်တို့သည် 2019 နှစ်ကုန်ပြီဟု ယူဆရမည်ဖြစ်ပြီး၊ ကျွန်ုပ်တို့၏ခေတ်၏သူရဲကောင်း၊ လူသိများသော Man-Orchestra (စီမံခန့်ခွဲသူ၊ ရှေ့နေ၊ သတင်းအချက်အလက်လုံခြုံရေးအရာရှိ၊ ပရိုဂရမ်မာနှင့် လက်တွေ့ကျကျ MVP) Evgeny V. သည် $i ပြောင်းလဲမှုအား တစ်ခုနှင့်တစ်ခု ခွဲခြားထားသည်။ array ၊ သံသရာကိုကျွမ်းကျင်ပြီ၊ နောက်နှစ်နှစ်လောက်မှာကြည့်ရင် Chocolatey ကိုကျွမ်းကျင်လိမ့်မယ်၊ PowerShell ဖြင့် အပြိုင်လုပ်ဆောင်ခြင်း။ и ForEach-Object Parallel လာလိမ့်မည်။

1. ကျွန်ုပ်တို့၏ bot သည် မည်သို့လုပ်ဆောင်မည်ကို ကျွန်ုပ်တို့တွေးသည်။

ငါ့မှာ စိတ်ကူးမရှိဘူး၊ တွေးရမယ်။ bot-notebook ရေးပြီးပြီ။ "တစ်နေရာရာကို ပို့ပေးတဲ့ ဘော့တ်" ကို မဖန်တီးချင်ပါဘူး။ Azure ကိုချိတ်ဆက်ရန်အတွက် သင်သည် ခရက်ဒစ်ကတ်တစ်ခု လိုအပ်သည်၊ သို့သော် ကျောင်းသားက ၎င်းကို ဘယ်ကရသနည်း။ အရာအားလုံးက သိပ်မဆိုးဘူးလို့ မှတ်သားထားသင့်ပါတယ်- ပင်မတိမ်တိုက်တွေက စမ်းသပ်ကာလအချို့ကို အခမဲ့ပေးပါတယ် (ဒါပေမယ့် မင်းခရက်ဒစ်ကတ်နံပါတ်တစ်ခုလိုနေသေးတယ် - အဲဒါကို နုတ်ယူလိုက်တာက ဒေါ်လာတစ်ဒေါ်လာဖြစ်ပုံရတယ်။ ငါမမှတ်မိတော့ဘူး။ နောက်မှပြန်လာရင်။)

AI ML မရှိရင် မိုက်မဲတဲ့ကဗျာ bot ကို ဖန်တီးရတာ သိပ်စိတ်ဝင်စားစရာ မရှိပါဘူး။

အဘိဓာန်တွင် အင်္ဂလိပ်စကားလုံးများကို ကျွန်ုပ် (သို့မဟုတ) သတိပေးမည့် bot တစ်ခုကို ပြုလုပ်ရန် ဆုံးဖြတ်ခဲ့သည်။
အဘိဓာန်သည် ဒေတာဘေ့စ်နှင့် မရှုပ်စေရန်အတွက်၊ စာသားဖိုင်တွင် ပါရှိမည်ဖြစ်ပြီး လူကိုယ်တိုင် ဖြည့်စွက်ပါ။
ဤကိစ္စတွင်၊ အလုပ်မှာ အခြေခံအချက်များကို ပြသရန်ဖြစ်ပြီး အနည်းဆုံး တစ်စိတ်တစ်ပိုင်း ပြီးသွားသည့် ထုတ်ကုန်ကို ပြုလုပ်ရန် မဟုတ်ပါ။

2. ပထမဆုံးအနေနဲ့ ဘာနဲ့ ဘယ်လိုကြိုးစားနေလဲ။

C:poshtranslate ဖိုင်တွဲကို ဖန်တီးပါ။
ပထမဦးစွာ၊ ကျွန်ုပ်တို့တွင်မည်သည့် powershell အမျိုးအစားရှိသည်၊ ISE ကို start-run မှတဆင့်ကြည့်ရှုကြပါစို့
powershell သည်
သို့မဟုတ် ထည့်သွင်းထားသော ပရိုဂရမ်များတွင် Powershell ISE ကို ရှာပါ။
စတင်ပြီးနောက်၊ ပုံမှန်အကျွမ်းတဝင်ရှိသော “အယ်ဒီတာအချို့” သည် စာသားအကွက်မရှိပါက “File - create new” ကို အမြဲတမ်းနှိပ်နိုင်သည်။

powershell ဗားရှင်းကို ကြည့်ကြပါစို့ - စာသားအကွက်တွင် ရေးပါ။

get-host 

F5 ကိုနှိပ်ပါ။

Powershell သည် သိမ်းဆည်းရန် ကမ်းလှမ်းလိမ့်မည် - "သင် run တော့မည့် script ကို သိမ်းဆည်းပါမည်။"၊ ကျွန်ုပ်တို့ သဘောတူပြီး ဖိုင်ကို C: အမည်ဖြင့် poshtranslate ဖြင့် သိမ်းဆည်းပါ myfirstbotBT100.

စတင်ပြီးနောက်၊ အောက်စာသားအကွက်တွင် ဒေတာပြားတစ်ခုကို ကျွန်ုပ်တို့ရရှိသည်-

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

ငါ့မှာ 5.1 ရှိတယ်၊ လုံလောက်တယ်။ အကယ်၍ သင့်တွင် Windows 7/8 အဟောင်းတစ်ခုရှိလျှင် ၎င်းမှာ အဆင်ပြေပါသည် - PowerShell ကို ဗားရှင်း 5 သို့ မွမ်းမံရန်လိုအပ်သော်လည်း ဥပမာအားဖြင့်၊ ညွှန်ကြားချက်.

အောက်ပါ command line တွင် Get-Date ဟုရိုက်ထည့်ပါ၊ Enter နှိပ်ပါ၊ အချိန်ကိုကြည့်ပါ၊ command ဖြင့် root folder သို့သွားပါ။
cd
cls အမိန့်ဖြင့် စခရင်ကို ရှင်းလင်းပါ (မဟုတ်ပါ၊ rm သုံးရန် မလိုအပ်ပါ)

အခု ဘာအလုပ်လုပ်သလဲ ဆိုတာကို စစ်ဆေးကြည့်ရအောင် - ကုဒ်တောင် မရေးဘဲ စာကြောင်းနှစ်ကြောင်း ရေးပြီး သူတို့ဘာလုပ်တယ်ဆိုတာကို နားလည်အောင် ကြိုးစားပါ။ get-host သင်္ကေတ # ဖြင့် စာကြောင်းကို မှတ်ချက်ပေးပြီး အနည်းငယ်ထည့်ကြည့်ကြပါစို့။

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

(စိတ်ဝင်စားဖို့ကောင်းပါတယ်။ Habré ပေါ်က code design drop-down list မှာ ရွေးချယ်စရာ နှစ်ဒါဇင်ရှိပါတယ် - ဒါပေမယ့် powershell မရှိပါဘူး။ Dos ကတော့ Perl ဖြစ်ပါတယ်။)

GUI မှ F5 သို့မဟုတ် ">" ကိုနှိပ်ခြင်းဖြင့် ကုဒ်ကိုဖွင့်ပါ။

ကျွန်ုပ်တို့သည် output ကိုရရှိသည်-

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

ယခု ဤစာကြောင်းနှစ်ကြောင်းနှင့် အနာဂတ်တွင် ဤအရာသို့ ပြန်မလာစေရန်အတွက် စိတ်ဝင်စားဖွယ်အချက်အချို့ကို ကိုင်တွယ်ကြပါစို့။

Pascal (သာမက) နှင့်မတူဘဲ powershell ကိုယ်တိုင်က variable တစ်ခုသို့ assign လုပ်ရမည့် အမျိုးအစားကို ဆုံးဖြတ်ရန် ကြိုးစားသည်၊ ဤအကြောင်းကို ဆောင်းပါးတွင် ရေးထားသည်။ ပရိုဂရမ်းမင်းဘာသာစကားဖြင့် စာရိုက်ခြင်းဆိုင်ရာ ပညာပေးအစီအစဉ်
ထို့ကြောင့်၊ $TimeNow variable ကို သတ်မှတ်ပြီး လက်ရှိရက်စွဲနှင့် အချိန် (Get-Date) ၏တန်ဖိုးကို သတ်မှတ်ခြင်းဖြင့်၊ မည်သည့်ဒေတာအမျိုးအစားရှိမည်ကို ကျွန်ုပ်တို့ အလွန်စိုးရိမ်နေစရာ မလိုပါ။

မှန်ပါတယ်၊ ဒီမောဟက အဲဒီအခါမှာ ထိခိုက်နိုင်တယ်၊ ဒါပေမယ့် အဲဒါက နောက်ပိုင်းမှာ။ အောက်တွင် စာသားတွင် နမူနာတစ်ခုဖြစ်သည်။
ငါတို့ဘာတွေရလဲ ကြည့်ရအောင်။ Execute ( command line တွင် )

$TimeNow | Get-member

နားမလည်နိုင်သော စာမျက်နှာတစ်ခုကို ရယူပါ။

နားမလည်နိုင်သော စာသား နံပါတ် ၁ ဥပမာ

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 အမျိုးအစား၏ variable ကို နည်းလမ်းများစွာဖြင့် (ဤပြောင်းလဲနိုင်သော အရာဝတ္ထုနှင့် ကျွန်ုပ်တို့ လုပ်ဆောင်နိုင်သည့်အရာအတွက်) နှင့် ဂုဏ်သတ္တိများကို နည်းလမ်းများစွာဖြင့် ဖန်တီးထားသည်။

ခေါ်ကြရအောင် $TimeNow.DayOfYear - တစ်နှစ်တာ၏နေ့ရက်အရေအတွက်ကိုရယူပါ။
ခေါ်ကြရအောင် $TimeNow.DayOfYear | Get-Member - ရယူပါ။ TypeName: System.Int32 နည်းလမ်းများအုပ်စု။
ခေါ်ကြရအောင် $TimeNow.ToUniversalTime() - UTC တွင်အချိန်ကိုရယူပါ။

Debugger

တစ်ခါတစ်ရံတွင် သင်သည် ပရိုဂရမ်တစ်ခုကို မျဉ်းတစ်ကြောင်းအထိ လုပ်ဆောင်ရန် လိုအပ်ပြီး ထိုအချိန်တွင် ပရိုဂရမ်၏ အခြေအနေကို ကြည့်ရှုရန် လိုအပ်သည်။ ဒါကိုလုပ်ဖို့ ISE မှာ Debug လုပ်ဆောင်ချက် - toggle break point ရှိပါတယ်။
အလယ်တွင် ဖြတ်မှတ်တစ်ခုကို ချထားပါ၊ ဤမျဉ်းနှစ်ကြောင်းကို ပြေးပြီး ဖြတ်ပိုင်းပုံသဏ္ဌာန်ကို ကြည့်ရှုပါ။

3. Telegram bot နှင့် အပြန်အလှန်ဆက်သွယ်မှုကို နားလည်ခြင်း။

ဟုတ်ပါတယ်၊ bot နဲ့ အပြန်အလှန် အကျိုးပြုမှုတွေနဲ့ စာပေတွေတောင် ရေးပြီးသွားပြီ၊ ဒါပေမယ့် သီအိုရီရဲ့ မေးခွန်းကို စိတ်ကြိုက်ရွေးချယ်နိုင်ပါတယ်။

ကျွန်ုပ်တို့၏ကိစ္စတွင်၊ ကျွန်ုပ်တို့လိုအပ်သည်-

  • စာပေးစာယူ တစ်ခုခု ပေးပို့ရန် သင်ယူပါ။
  • စာပေးစာယူမှ တစ်ခုခုရရန် သင်ယူပါ။

3.1 စာပေးစာယူသို့ တစ်စုံတစ်ခုကို ပေးပို့ရန်နှင့် ၎င်းထံမှ လက်ခံရယူရန် သင်ယူခြင်း။

အချို့ကုဒ် - အပိုင်း ၃

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

ဤနေရာ၌ RF တွင် အဝေးထိန်းဆာဗာသို့ ချိတ်ဆက်၍မရသော အမှားကို ကျွန်ုပ်တို့ ရရှိပါသည်။

သို့မဟုတ် ကျွန်ုပ်တို့ နားမလည်ပါ - ၎င်းသည် တယ်လီကွန်းအော်ပရေတာနှင့် ပရောက်စီကို စီစဉ်သတ်မှတ်ပြီး အလုပ်လုပ်ခြင်းအပေါ် မူတည်သည်။
ကောင်းပြီ - proxy ထည့်ရန်ကျန်နေသေးသည်။ ကျေးဇူးပြု၍ သတိပြုပါ - ကုဒ်ဝှက်မထားဘဲ ယေဘုယျအားဖြင့် ဘယ်ဘက်ပရောက်စီကို အသုံးပြုခြင်းသည် သင့်ကျန်းမာရေးအတွက် အလွန်အန္တရာယ်များပါသည်။

အလုပ်လုပ်သော proxy ကိုရှာဖွေရန်တာဝန်သည်အလွန်ခက်ခဲသည်မဟုတ် - ထုတ်ဝေထားသော http proxy အများစုသည်အလုပ်လုပ်သည်။ ကျွန်တော့်အတွက် ပဉ္စမမြောက် ဆက်တိုက်ဖြစ်ပုံရသည်။

ပရောက်စီကို အသုံးပြု၍ အစီအမံ-

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

bot နှင့် သင့် chat တွင် မက်ဆေ့ချ်တစ်ခု လက်ခံရရှိပါက အားလုံးအဆင်ပြေပါသည်၊ သင် ဆက်လက်လုပ်ဆောင်နိုင်ပါသည်။ မဟုတ်ပါက၊ အမှားရှာပြင်ခြင်းကို ဆက်လက်လုပ်ဆောင်ပါ။

သင့် $URL4SEND စာကြောင်းသည် မည်သည့်အရာသို့ ပြောင်းလဲသွားသည်ကို သင်မြင်နိုင်ပြီး ဤကဲ့သို့သော ဘရောက်ဆာတွင် ၎င်းကို တောင်းဆိုကြည့်ပါ-

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

၃.၂။ ချတ်မှာ "တစ်ခုခု" ရေးတတ်ဖို့ သင်ယူပြီးပြီ၊ အခုဖတ်ဖို့ ကြိုးစားပါမယ်။

နောက်ထပ် စာကြောင်း 4 ကြောင်းကို ပေါင်း၍ | get-member

$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"

ကံကောင်းထောက်မစွာ၊ ယခင်ထုတ်ဝေခဲ့သော ဆောင်းပါးတွင် စနစ်စီမံခန့်ခွဲသူအတွက် Telegram bot၊ ဤစာကြောင်း ($MyMessageGet.RawContent | အရ ဟုတ်တယ်၊ get-member သည် System.String ဖြစ်သည်။) ဖျက်ပြီးပြီ။

4. လက်ခံရရှိမှုကို လုပ်ဆောင်ပါ (အနည်းဆုံး တစ်ခုခု ပေးပို့နည်းကို ကျွန်ုပ်တို့ သိထားပြီးဖြစ်သည်)

ရေးထားပြီးသား ဒီမှာအလိုအပ်ဆုံးက အကြောင်းအရာထဲမှာ ပါပါတယ်။ ပိုသေသေချာချာကြည့်ရအောင်။

ပထမဦးစွာ၊ ဝဘ်အင်တာဖေ့စ်မှ သို့မဟုတ် ဖုန်းမှ bot သို့ နောက်ထပ်စာစုနှစ်ပုဒ်ရေးကြပါစို့

/message1
/message2
/message3

$URLGET variable တွင်ထုတ်လုပ်ထားသောလိပ်စာကိုဘရောက်ဆာမှတဆင့်ကြည့်ရှုပါ။

တစ်ခုခုကို တွေ့ရပါလိမ့်မယ်-

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

ဒါဘာလဲ? မက်ဆေ့ချ်သတ်မှတ်စနစ်၊ ချတ်သတ်မှတ်စနစ်၊ dispatch identifier နှင့် အချက်အလက်အများအပြားပါရှိသော အရာဝတ္ထုများ၏ arrays မှ ရှုပ်ထွေးသောအရာအချို့။

သို့သော်၊ ကျွန်ုပ်တို့သည် "ဤအရာသည် မည်သည့်အရာဖြစ်သည်" ကို ခွဲခြမ်းစိတ်ဖြာရန် မလိုအပ်ပါ - အလုပ်၏တစ်စိတ်တစ်ပိုင်းသည် ကျွန်ုပ်တို့အတွက် လုပ်ဆောင်ပြီးဖြစ်သည်။ အထဲမှာ ဘာတွေပါလဲ ကြည့်ရအောင်။

လက်ခံရရှိထားသောစာများ သို့မဟုတ် အပိုင်း 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#>

ယခု ကျွန်ုပ်တို့သည် အဘိဓာန်ကို မည်သည့်နေရာတွင် ရယူရမည်နည်း။

ဟုတ်ပါတယ်၊ သင်သည် ကြီးမားသောအဘိဓာန်တစ်ခုကို ဇာတ်ညွှန်း၏စာသားတွင် မှန်ကန်စွာဖြည့်နိုင်သော်လည်း ၎င်းသည် လုံးဝမဖြစ်ပါ။
ထို့ကြောင့်၊ ပုံမှန်အားဖြင့် powershell နှင့်အလုပ်လုပ်နိုင်သည်ကိုကြည့်ကြပါစို့။
တကယ်တော့ သူက ဘာဖိုင်တွဲလုပ်ရမယ်ဆိုတာ ဂရုမစိုက်ဘူး၊ ငါတို့ ဂရုမစိုက်ဘူး။
ကျွန်ုပ်တို့တွင် ရွေးချယ်စရာတစ်ခုရှိသည် - txt (ဒါက ဖြစ်နိုင်ပေမယ့် ဘာကြောင့်လဲ) csv၊ xml။
သငျသညျလူတိုင်းမြင်နိုင်သည်လူတိုင်းကြည့်ရှုကြပါစို့။
အတန်း MyVocabClassExample1 နှင့် variable $MyVocabExample1 ကို ဖန်တီးပါ။
အတန်းကို $ မပါပဲ ရေးထားတာ သတိပြုမိပါတယ်။

အချို့ကုဒ်နံပါတ် ၅

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 လိုင်းပေါ်တွင် အမှားတစ်ခုရယူပါ။

မထည့်ချင်ဘူး ah-ah ရှက်စရာကြီး။

$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","ReadOnly","IsFixedSize","Synchronized"
#
နည်းနည်းပြန်ရေးကြည့်ရအောင်။

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

အထောက်အကူဖြစ်ပုံရပေမယ့် ပုံစံကိုတော့ မကြိုက်သေးပါဘူး။

အထူးသဖြင့် အရာဝတ္ထုတစ်ခုမှ စာကြောင်းများကို ဖိုင်တစ်ခုသို့ တိုက်ရိုက်မထည့်နိုင်ခြင်းကို ကျွန်ုပ် မကြိုက်ပါ။
စကားမစပ်၊ ကျွန်ုပ်တို့သည် ဖိုင်များသို့ စတင်ရေးသားကတည်းက၊ လွှင့်တင်ခြင်းကို စတင်မှတ်တမ်းတင်နိုင်ပါသလား။ ကျွန်ုပ်တို့တွင် variable အဖြစ် အချိန်ရှိသည်၊ ကျွန်ုပ်တို့သည် ဖိုင်အမည်ကို သတ်မှတ်နိုင်သည်။

မှန်ပါသည်၊ ရေးစရာမရှိသေးသော်လည်း မှတ်တမ်းများကို လှည့်ခြင်းအား မည်သို့အကောင်းဆုံးလုပ်ဆောင်ရမည်ကို သင်စဉ်းစားနိုင်ပါသည်။
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 သို့ တင်ပို့ခြင်းသည် ခိုင်မာသော အားသာချက်များဖြစ်သည် - ဖတ်နိုင်မှု၊ အရာဝတ္တုတစ်ခုလုံးကို တင်ပို့ခြင်းနှင့် uppend လုပ်ဆောင်ရန် မလိုအပ်ပါ။

ကြိုးစား xml ဖိုင်ကိုဖတ်ပါ။.

xml မှ အနည်းငယ်ဖတ်သည်။

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

တာဝန်ကို ပြန်စကြရအောင်။ ကျွန်ုပ်တို့သည် စမ်းသပ်ဖိုင်တစ်ခုရေးသည်၊ ၎င်းကိုဖတ်သည်၊ သိုလှောင်မှုဖော်မတ်သည် နားလည်နိုင်သည်၊ လိုအပ်ပါက၊ သင်သည် စာကြောင်းများထည့်ရန်နှင့် ဖျက်ရန် သီးခြားဖိုင်အသေးစားအယ်ဒီတာကို ရေးသားနိုင်သည်။

အလုပ်က လေ့ကျင့်ရေး bot လေးတစ်ခုလုပ်ရမယ်ဆိုတာ သတိပေးပါရစေ။

အလုပ်ဖော်မတ်- ကျွန်ုပ်သည် bot သို့ "ဥပမာ" အမိန့်ကို ပေးပို့သည်၊ bot သည် ကျပန်းရွေးချယ်ထားသော စကားလုံးနှင့် စာသားမှတ်တမ်းကို ပေးပို့ပြီး 10 စက္ကန့်အကြာတွင် ဘာသာပြန်ခြင်းနှင့် မှတ်ချက်တစ်ခု ပေးပို့ပါသည်။ ကျွန်ုပ်တို့သည် ညွှန်ကြားချက်များကို မည်သို့ဖတ်ရမည်ကို သိရှိပြီး ပရောက်စီများကို အလိုအလျောက်ရွေးချယ်ပြီး စစ်ဆေးနည်းကို လေ့လာကာ မက်ဆေ့ချ်ကောင်တာများကို မေ့ပျောက်စေရန် ပြန်လည်သတ်မှတ်ပါ။

မလိုအပ်ဟု ယခင်က ထင်မြင်ချက်ပေးခဲ့သမျှကို မှတ်ချက်မပေးဘဲ မလိုအပ်ဘဲဖြစ်သွားသော txt နှင့် csv ဖြင့် ဥပမာများကို မှတ်ချက်ပေးကာ ဖိုင်ကို ဗားရှင်း B106 အဖြစ် သိမ်းဆည်းပါ

ဟုတ်ကဲ့။ ဘော့တ်ထံ တစ်ခုခု ပို့ကြရအောင်။

6. လုပ်ဆောင်ချက်များမှ ပေးပို့ခြင်းနှင့် အခြားအရာများ

ဧည့်ခံမှုကို မလုပ်ဆောင်မီ၊ သင်သည် စမ်းသပ်မက်ဆေ့ချ်မှလွဲ၍ "အနည်းဆုံး တစ်ခုခု" ပေးပို့ခြင်း၏ လုပ်ဆောင်ချက်ကို ပြုလုပ်ရန် လိုအပ်ပါသည်။

ဥပမာအားဖြင့်၊ ကျွန်ုပ်တို့တွင် ပေးပို့မှုတစ်ခုနှင့် လုပ်ဆောင်ခြင်းတစ်ခုသာ ရှိလိမ့်မည်၊ သို့သော် ကျွန်ုပ်တို့သည် တူညီသောအရာကို အကြိမ်များစွာ ပြုလုပ်ရန် လိုအပ်ပါက အဘယ်နည်း။

function တစ်ခုရေးရတာ ပိုလွယ်တယ်။ ထို့ကြောင့်၊ ကျွန်ုပ်တို့တွင် $MyVocabExample4AsArray အရာဝတ္ထုအမျိုးအစား၏ variable တစ်ခုရှိသည်၊၊ ဖိုင်မှဖတ်သော၊ ဒြပ်စင်နှစ်ခု၏ array တစ်ခုအနေဖြင့်၊
သွားဖတ်ကြည့်ရအောင်။

တစ်ချိန်တည်းမှာပင်၊ ကျွန်ုပ်တို့သည် နာရီကို ကိုင်တွယ်ဖြေရှင်းမည်ဖြစ်ပြီး၊ ကျွန်ုပ်တို့သည် ၎င်းကို နောက်ပိုင်းတွင် လိုအပ်လိမ့်မည် (တကယ်တော့၊ ဤဥပမာတွင်၊ ကျွန်ုပ်တို့သည် ၎င်းကို မလိုအပ်ပါ 🙂

အချို့ကုဒ်နံပါတ် 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 ကို အစောပိုင်းက hard-coded လုပ်ထားသည့် function တွင် ခေါ်သည်။

၎င်းကို သင်လုပ်ဆောင်ရန် မလိုအပ်ပါ၊ အကယ်၍ $MyToken သည် bot တစ်ခုစီအတွက် တစ်ခုဖြစ်ပါက၊ ထို့နောက် $MyChatID သည် ချတ်ပေါ်မူတည်၍ ပြောင်းလဲသွားပါမည်။

သို့သော်၊ ဤသည်မှာ ဥပမာတစ်ခုဖြစ်သောကြောင့်၊ ကျွန်ုပ်တို့သည် ၎င်းကို ယခုအချိန်အထိ လျစ်လျူရှုထားမည်ဖြစ်သည်။

$MyVocabExample4AsArray သည် array တစ်ခုမဟုတ်သောကြောင့် အလွန်ဆင်တူသော်လည်း၊ မင်းချည်းပဲ မယူနိုင်ဘူး။ ၎င်း၏အရှည်ကိုမေးပါ။

ကုဒ်နဲ့မညီဘဲ လေထီးမချဘဲ မရနိုင်တာတွေကို ပြန်လုပ်ရလိမ့်မယ်။

အချို့ကုဒ်နံပါတ် 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)
# Угадайте сами, какой пример легче читается посторонними людьми.

Random စိတ်ဝင်စားစရာကောင်းသောအင်္ဂါရပ်. ကျွန်ုပ်တို့သည် 0 သို့မဟုတ် 1 ကို ရယူလိုသည် (ကျွန်ုပ်တို့၏ array တွင် ဒြပ်စင်နှစ်ခုသာရှိသည်)။ နယ်နိမိတ်များကို 0..1 သတ်မှတ်သောအခါ - "1" ရပါမည်လား။
မဟုတ်ပါ - ကျွန်ုပ်တို့ မရနိုင်ပါ၊ ကျွန်ုပ်တို့ အထူးဥပမာတစ်ခုပေးထားပြီး ဥပမာ 2- 0 နှင့် 99 ကြား ကျပန်း ကိန်းပြည့်ကို ရယူပါ-ကျပန်း - အများဆုံး 100
ထို့ကြောင့်၊ 0..1 အတွက်၊ ကျွန်ုပ်တို့သည် အရွယ်အစားကို 0..2 အဖြစ် သတ်မှတ်ရန် လိုအပ်ပြီး အမြင့်ဆုံး ဒြပ်စင်နံပါတ် = 1 ဖြစ်သည်။

7. အဝင်မက်ဆေ့ချ်များကို လုပ်ဆောင်ခြင်းနှင့် တန်းစီခြင်း၏ အများဆုံးအရှည်

စောစောက ငါတို့ ဘယ်မှာ ရပ်ခဲ့တာလဲ။ ကျွန်ုပ်တို့တွင် လက်ခံရရှိသော $MyMessageGet ကိန်းရှင်တစ်ခုရှိသည်။
၎င်းမှရရှိသော $Content4Pars01၊ ခင်းကျင်းမှု Content4Pars01.ရလဒ်

$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 လို့ တချို့ကဖော်ပြတာကို powershell လို့ခေါ်တယ်။ switch မှတဆင့်. တစ်ချိန်တည်းမှာပင်၊ လုံးဝမလိုအပ်ဘဲ အန္တရာယ်ပင်ဖြစ်စေသည့် အောက်ပါကုဒ်တွင် -wildcard သော့ကို အသုံးပြုပါသည်။

အချို့ကုဒ်နံပါတ် 7.1

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

ဇာတ်ညွှန်းကို နှစ်ခါလောက် လုပ်ကြည့်ရအောင်။ အထူးသဖြင့် ကျပန်းလုပ်ဆောင်မှုတွင် အမှားလုပ်မိပါက တူညီသောစကားလုံးနှစ်လုံးကို ကျွန်ုပ်တို့ရရှိပါမည်။

ဒါပေမယ့် ရပ်လိုက်ပါ။ ကျွန်ုပ်တို့သည် / စကားလုံးနောက်တဖန်မပို့ခဲ့ပါ၊ အဘယ်ကြောင့်စာတိုကိုထပ်မံလုပ်ဆောင်နေသနည်း။

bot သို့ မက်ဆေ့ချ်များ ပေးပို့ရန် တန်းစီသည် ကန့်သတ်အရှည် ရှိသည် (စာ 100 သို့မဟုတ် 200 ဟု ကျွန်တော်ထင်သည်) နှင့် ၎င်းကို ကိုယ်တိုင်ရှင်းလင်းရပါမည်။

ဟုတ်ပါတယ်၊ ဒါကို စာရွက်စာတမ်းမှာ ဖော်ပြထားတယ်၊ ဒါပေမယ့် အဲဒါကို ဖတ်ဖို့ လိုအပ်တယ်။

ဤကိစ္စတွင်၊ ကျွန်ုပ်တို့သည် ?chat_id ကန့်သတ်ချက်၊ &timeout၊ &limit၊ &parse_mode=HTML နှင့် &disable_web_page_preview=true မလိုအပ်သေးပါ။

စာတမ်းပြုစုခြင်း။ Telegram api ကဒီမှာ
အင်္ဂလိပ်လို နဲ့ အဖြူရောင် လို့ ဆိုပါတယ်
ပြန်ပေးမည့် ပထမဆုံးအပ်ဒိတ်၏ အထောက်အထား။ ယခင်ရရှိထားသော မွမ်းမံမှုများ၏ ခွဲခြားသတ်မှတ်မှုများတွင် အမြင့်ဆုံးထက် တစ်ခုအားဖြင့် ကြီးရပါမည်။ မူရင်းအားဖြင့်၊ အစောဆုံးနှင့် စတင်သော အပ်ဒိတ်များ
အတည်မပြုရ update တွေ ပြန်ပေးတယ်။ getUpdates ဟုခေါ်သည်နှင့်တပြိုင်နက် အပ်ဒိတ်ကို အတည်ပြုသည်ဟု ယူဆပါသည်။ offset ပိုမိုမြင့်မား ၎င်း၏ update_id ထက်. အပ်ဒိတ်တန်းစီ၏အဆုံးမှ -offset အပ်ဒိတ်မှစတင်၍ အပ်ဒိတ်များကိုရယူရန် အနုတ်အော့ဖ်ဆက်ကို သတ်မှတ်နိုင်သည်။ ယခင်အပ်ဒိတ်များအားလုံးကို မေ့သွားပါမည်။

ကြည့်လိုက်ကြရအောင်

$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 

မက်ဆေ့ချ်များအားလုံးကို ပထမဆုံးလက်ခံရရှိရန်၊ ၎င်းတို့ကို လုပ်ဆောင်ရန်နှင့် အောင်မြင်စွာလုပ်ဆောင်ပြီးနောက်မှသာ အတည်မပြုရသေးသော တောင်းဆိုချက်ကို အတည်ပြုပြီးမှသာ သင့်အား မည်သူမျှ တားမြစ်ထားသည်။

လုပ်ဆောင်မှုအားလုံးပြီးသည်နှင့် အတည်ပြုချက်ခေါ်ဆိုရန် အဘယ်ကြောင့် အဓိပ္ပာယ်ရှိသနည်း။ ကွပ်မျက်မှုအလယ်တွင် ၎င်းသည် ကျရှုံးနိုင်ပြီး၊ အခမဲ့ chatbot ၏ဥပမာအတွက် မက်ဆေ့ချ်တစ်ခုအား ကျော်သွားခြင်းသည် အထူးအဆန်းမဟုတ်သေးပါက၊ အကယ်၍ သင်သည် တစ်စုံတစ်ဦး၏လစာ သို့မဟုတ် ကတ်ငွေပေးချေမှုကို လုပ်ဆောင်နေပါက ရလဒ်သည် ပိုဆိုးသွားနိုင်သည်။

နောက်ထပ် ကုဒ်စာကြောင်း နှစ်ကြောင်း

$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. ကောက်ချက်ချရာ၌၊

အဓိက လုပ်ဆောင်ချက်များ - မက်ဆေ့ချ်များကို ဖတ်ခြင်း၊ တန်းစီခြင်းကို ဖယ်ရှားခြင်း၊ ဖိုင်တစ်ခုမှ ဖတ်ခြင်းနှင့် ဖိုင်တစ်ခုသို့ စာရေးခြင်းတို့ကို ပြီးမြောက်အောင် ပြသသည်။

လုပ်စရာလေးခုပဲကျန်တော့တယ်။

  • chat တွင် တောင်းဆိုချက်အတွက် အဖြေမှန်ကို ပေးပို့ပါ။
  • bot တစ်ခုထည့်ထားသည့် မည်သည့် chat ကိုမဆို တုံ့ပြန်မှုတစ်ခု ပေးပို့ခြင်း။
  • ကုဒ်ကို အကွက်တစ်ခုအတွင်း လုပ်ဆောင်ခြင်း
  • windows scheduler မှ bot ကိုဖွင့်ပါ။

ဤလုပ်ငန်းဆောင်တာများအားလုံးသည် ကန့်သတ်ချက်များဆိုင်ရာ စာရွက်စာတမ်းများကို ဖတ်ရှုခြင်းဖြင့် ရိုးရှင်းပြီး လွယ်ကူစွာ အကောင်အထည်ဖော်နိုင်သည်။
Set-ExecutionPolicy ကန့်သတ်မထားဘဲနှင့် -ExecutionPolicy ရှောင်ကွင်း
ပုံစံ၏သံသရာ

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

ဖတ်ရှုပေးတဲ့အတွက် အားလုံးကို ကျေးဇူးတင်ပါတယ်။

source: www.habr.com

မှတ်ချက် Add