შეინარჩუნეთ Windows VPN ჩართული: გაუშვით rasdial გათიშვის მოვლენაზე
RasClient 20226 და 20227 აღნიშნავს ჩავარდნას; 631 ნიშნავს, რომ ადამიანმა გააკეთა ეს. გაუშვით rasdial პირველ ორზე, შეინახეთ აუთენტიფიკაციის ერთი ნაკრები და წაიკითხეთ გასვლის კოდი.
Windows არ გვთავაზობს გადაკავშირების პოლიტიკას თავისი VPN კლიენტისთვის, ამიტომ ღამის შუაში ჩავარდნილი კავშირი დილის საუზმეზეც გათიშულია. დაგეგმილი ამოცანა, რომელიც აკვირდება გათიშვას და უშვებს rasdial-ს, ხურავს ამ ხარვეზს მესამე მხარის კლიენტის გარეშე. ამოცანა ოპერატორივით იქცევა თუ ციკლივით, ეს სამ დეტალზეა დამოკიდებული: რომელ მოვლენებს ემთხვევა, რომელ აუთენტიფიკაციის მონაცემებს ხედავს და რას აკეთებს შედეგით. სამიდან არცერთი არ არის რთული, და რომელიმეს გამოტოვება სწორედ ის არის, რაც ქმნის ამოცანას, რომელიც სამუდამოდ რეკავს.
რატომ არის ტაიმერი არასწორი ტრიგერი
ტაიმერი რეკავს საკუთარი გრაფიკით, მიუხედავად იმისა, გათიშულია გვირაბი თუ არა. ეს ქმნის მცდელობებს, რომლებიც არავის სჭირდებოდა, და სამუშაო სესიის დროს მცდელობამ შეიძლება შეწყვიტოს ის. მოვლენის ტრიგერი ირთვება მხოლოდ მაშინ, როცა კავშირი იცვლის მდგომარეობას, რაც უფრო იაფია და უფრო ადვილი მისახვედრი. მოვლენა ასევე ატარებს მიზეზს, და მიზეზი არის ის, რაც ჰყოფს ქსელის ხარვეზს განზრახ გათიშული ადამიანისგან.
ეს განსხვავება არის სხვაობა სასარგებლო ამოცანასა და იმ ამოცანას შორის, რომელიც ყოველ საღამოს მომხმარებელს ეჯიბრება. ეს ასევე ის ნაწილია, რომელიც ჩვეულებრივ აკლია რეცეპტებს, რომლებიც მხოლოდ მოქმედებას აღწერენ.
მოვლენათა წყვილი, და ის, რომელიც უნდა ჩაახშო
Remote Access Service-ის კლიენტი სასიცოცხლო ციკლის ჩანაწერებს წერს Application ჟურნალში RasClient პროვაიდერის ქვეშ. 20226 აღნიშნავს დასრულებულ კავშირს, ხოლო 20227 წარუმატებელ მცდელობას, ამიტომ ორივე მათგანს შეუძლია გაამართლოს ახალი რეკვა. დანარჩენი ყველაფერი ამოცანაში დამოკიდებულია ამ ორი იდენტიფიკატორის ზუსტ დამთხვევაზე. ისინი წლების განმავლობაში სტაბილურია, ამიტომ მათზე აგებული რეცეპტები ჯერ კიდევ ბრუნავს, მაგრამ კონსტრუქცია, რომელიც პროვაიდერს ან იდენტიფიკატორებს გადაარქმევს, იწვევს იმას, რომ მოთხოვნა არაფერს აბრუნებს. გაიმეორეთ დამტკიცების ნაბიჯი ყოველი ფუნქციის განახლების შემდეგ, იმის მოლოდინის ნაცვლად, რომ ამოცანა შეწყვეტს გააქტიურებას.
ერთი დასრულება უნდა გამოირიცხოს. შეცდომა 631 ნიშნავს, რომ პორტი მომხმარებელმა გათიშა, და იმ მომენტში ხელახალი რეკვა ეჯიბრება ადამიანს, რომელმაც ახლახან განზრახ შეიცვალა ქსელი. გამორიცხვა ჩადეთ ტრიგერის ფილტრში და არა სკრიპტში, რათა ამოცანა საერთოდ არ დაიწყოს. ის უნდა ეხებოდეს მხოლოდ ერთ მოვლენის ID-ს, რადგან EventData პრედიკატი ემთხვევა მხოლოდ მაშინ, როცა დასახელებული ელემენტი არსებობს, და საერთო დებულება ჩუმად გამოტოვებდა მეორე ID-ის ყველა მოვლენას. წაიკითხეთ ელემენტის სახელი რეალური ჩანაწერიდან ფილტრის დაწერამდე:
Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml
XML აჩვენებს Data-ის ზუსტ სახელებს ამ ჩანაწერში. ErrorCode ჩვეულებრივი მართლწერაა, და ჩანაწერს, რომელიც სხვას იყენებს, სჭირდება ამ სახელის ჩანაცვლება ქვემოთ მოცემულ ფილტრში.
<QueryList><Query Id="0" Path="Application"><Select Path="Application">*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and (EventData[Data[@Name='ErrorCode'] != '631'] or System[EventID=20227])</Select></Query></QueryList>
ჩასვით ეს ტრიგერის მორგებულ ფილტრში და დაამტკიცეთ როგორც მოთხოვნა, სანამ ის ტრიგერი გახდება. იგივე XPath მუშაობს PowerShell-იდან ცოცხალი ჟურნალის წინააღმდეგ, რაც იაფი გზაა იმის სანახავად, რას ემთხვევა, სანამ ამოცანის ისტორია ჯერ არ არის ჩართული.
Get-WinEvent -LogName Application -MaxEvents 40 -FilterXPath "*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and (EventData[Data[@Name='ErrorCode'] != '631'] or System[EventID=20227])" | Select-Object TimeCreated,Id,Message
ტრიგერი, რომელიც ჩუმად არაფერს ემთხვევა, ზუსტად ისე გამოიყურება, როგორც ამოცანა, რომელიც მუშაობს და ვარდება. ორივე ჩნდება როგორც „ავტომატიზაცია არ მუშაობს“, და არცერთი არ ამბობს, რომელი ნახევარი აკლია. პირველ რიგში შეამოწმეთ მოთხოვნის გამომავალი, რადგან ის ერთ ნაბიჯში ჰყოფს ორ შემთხვევას.
რეკვა ვერ ხერხდება, რადგან პაროლის აკრეფისთვის არავინ არის
მოქმედება უშვებს rasdial-ს კავშირის სახელით. როცა პროფილს არ აქვს დაქეშირებული აუთენტიფიკაციის მონაცემები, რეკვა დაუყოვნებლივ ვარდება, რადგან მოთხოვნაზე პასუხის გასაცემად არავინ არის. ეს არის ყველაზე გავრცელებული მიზეზი, რის გამოც სწორად გააქტიურებული ამოცანა არაფერ შესამჩნევს არ აკეთებს, ამიტომ შეამოწმეთ ეს ტრიგერზე შეხებამდე. ხელით რეკვა ბრძანების სტრიქონიდან ჰყოფს აუთენტიფიკაციის პრობლემას დაგეგმვის პრობლემისგან.
შეინახეთ აუთენტიფიკაციის მონაცემები ერთხელ იმ ანგარიშის ქვეშ, რომლითაც ამოცანა იმუშავებს, და ეს ანგარიში დიზაინის ნაწილად აქციეთ. SYSTEM-ად მომუშავე ამოცანა ვერ წაიკითხავს თქვენი ინტერაქტიული ანგარიშის მიერ დაქეშირებულ მონაცემებს, და არც სხვის სახელით მომუშავე ამოცანა. სახელი ასევე ზუსტად უნდა ემთხვეოდეს პროფილს, მომხმარებლის ველში ნებისმიერი დომენის პრეფიქსის ჩათვლით.
rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode
პირველი ბრძანება ჩამოთვლის სახელებს, რომლებიც Windows-მა იცის. მეორე რეკავს სახელით დაქეშირებული მონაცემების გამოყენებით, ხოლო მესამე არის ფორმა, რომელიც PowerShell მოქმედებამ უნდა გამოიყენოს, რადგან ის ელოდება და აბრუნებს მნიშვნელობას, რომელიც ამოცანას შეუძლია ჩაწეროს.
წაიკითხეთ გასვლის კოდი და არა ფანჯარა
ამოცანა, რომელიც იწყებს პროცესს დალოდების გარეშე, წარმატებას აცხადებს მაშინვე, როგორც კი პროცესი არსებობს. რეკვისთვის, რომელიც შეიძლება ერთ წამში ჩავარდეს, ეს განაჩენი უსარგებლოა. გასვლის კოდის დალოდება მოქმედებას რეალურ შედეგად აქცევს. ამოცანის ისტორია თავისთავად მხოლოდ იმას აჩვენებს, რომ პროცესი დაიწყო, არასდროს იმას, რომ გვირაბი ავიდა.
ჩაწერეთ მნიშვნელობა დროის ნიშნით ყოველ გაშვებაზე. ჩავარდნის შემდეგ ერთი მარცხი ნორმალურია, ხოლო სამი ზედიზედ მარცხი იმავე კოდით მიუთითებს აუთენტიფიკაციის მონაცემებზე ან პროფილზე და არა ქსელზე. სწორედ ეს ნიმუში ხდის ისტორიას წაკითხვად ღირსეულს.
დაამატეთ მოკლე გამეორების ინტერვალი დაზღვევის სახით და ცხადად თქვით, როგორ ურთიერთქმედებს ის მოვლენის ტრიგერთან. ხუთი წუთის განმავლობაში ყოველ წუთს გამეორება იძლევა მეორე მცდელობას, როცა ინტერნეტი გვირაბთან ერთად დაბრუნდა, და პარამეტრებში, „თუ ამოცანა უკვე მუშაობს, გამოიყენება შემდეგი წესი“, ამოცანას სურს „ახალი ეგზემპლარი არ დაიწყოს“, რათა გამეორება არ გადაფაროს ჯერ კიდევ მიმდინარე რეკვას. ამ პარამეტრის გარეშე ორი rasdial პროცესი შეიძლება ეჯიბრებოდეს ერთსა და იმავე პორტს და მეორე ვარდება ყოველგვარი სასარგებლო მიზეზის გარეშე.
დაამტკიცეთ აღდგენის გზა
გამოსცადეთ ორივე მიმართულება განზრახ. გათიშეთ ხელით და დაადასტურეთ, რომ ხელახალი რეკვა არ ხდება, შემდეგ გამორთეთ ქსელის ადაპტერი და დაადასტურეთ, რომ ამოცანა აქტიურდება, როცა კავშირი ბრუნდება. ეს ორი ტესტი ფარავს ჩახშობის წესს და ხარვეზის რეალურ შემთხვევას, და სხვა არაფერი აკეთებს ამას.
შემდეგ წაიკითხეთ ამოცანის ისტორია და არა კავშირის ხატულა. ისტორია ჩაწერს, როდის მუშაობდა ამოცანა, რომელი ანგარიში გამოიყენა და რა დააბრუნა მოქმედებამ, და ეს არის მტკიცებულება, რომელიც სჭირდება, როცა იგივე მანქანა მომავალ თვეში ისევ ჩავარდება.