โซลูชันการควบคุมระยะไกลและการเขียนสคริปต์ระยะไกลที่สร้างด้วย .NET, Blazor และ SignalR Core
ฉันกำลังมองหาผู้ดูแลเพื่อช่วยฉัน! หากคุณเป็นนักพัฒนา .NET และสนใจที่จะช่วยให้ Remotely ก้าวไปข้างหน้า โปรดส่ง DM มาให้ฉันทาง Discord ที่ jaredatimmy
ซับเรดดิท: https://www.reddit.com/r/remotely_app/
นักเทียบท่า: https://hub.docker.com/r/immybot/remotely
บทช่วยสอน: https://www.youtube.com/watch?v=t-TFvr7sZ6M (ขอบคุณ @bmcgonag!)
mkdir -p /var/www/remotely wget -q https://raw.githubusercontent.com/immense/Remotely/master/docker-compose/docker-compose.yml docker-compose up -d
Reverse Proxy เดียวที่รองรับคือ Caddy และเฉพาะเมื่อเชื่อมต่อกับอินเทอร์เน็ตโดยตรงเท่านั้น การกำหนดค่าเริ่มต้นสำหรับ Caddy ให้ทุกสิ่งที่ ASP.NET Core และ SignalR จำเป็นต้องใช้เพื่อให้ทำงานได้อย่างถูกต้อง
หากคุณประสบปัญหาด้านเครือข่ายกับการตั้งค่าอื่นๆ เช่น ไฟร์วอลล์เพิ่มเติมหรือกับ Nginx โปรดขอการสนับสนุนจากชุมชนในแท็บการสนทนา บน Reddit หรือไซต์โซเชียลอื่น ผู้ดูแลระยะไกลไม่สามารถให้คำแนะนำและการสนับสนุนสำหรับการตั้งค่าสภาพแวดล้อมที่เป็นไปได้ทั้งหมดได้
ด้วยเหตุนี้ ASP.NET Core จึงต้องตั้งค่าส่วนหัวต่อไปนี้เมื่ออยู่ด้านหลังพร็อกซีย้อนกลับ: X-Forwarded-Proto
, X-Forwarded-Host
และ X-Forwarded-For
สิ่งเหล่านี้สัมพันธ์กับรูปแบบ (http/https), URL ของคำขอเดิม และที่อยู่ IP ของลูกค้า ตามลำดับ รูปแบบและโฮสต์ที่เป็นผลลัพธ์จะถูกฉีดเข้าไปในโปรแกรมติดตั้งและไคลเอ็นต์เดสก์ท็อป เพื่อให้พวกเขารู้ว่าจะส่งคำขอไปที่ใด ที่อยู่ IP ของลูกค้าถูกใช้ในข้อมูลอุปกรณ์
รหัสระยะไกลไม่ได้แยกวิเคราะห์หรือจัดการค่าเหล่านี้ ดำเนินการภายในโดยมิดเดิลแวร์ในตัวของ ASP.NET Core หากค่าไม่ปรากฏตามที่คาดไว้ อาจเป็นเพราะส่วนหัวหายไป ไม่มีค่าที่ถูกต้อง ไม่อยู่ในรูปแบบที่ถูกต้อง หรือไม่มาจากชุดพรอกซีที่รู้จัก (ดูด้านล่าง)
เพื่อหลีกเลี่ยงการโจมตีแบบฉีด ASP.NET Core จะมีค่าเริ่มต้นให้ยอมรับเฉพาะส่วนหัวที่ส่งต่อจากที่อยู่แบบย้อนกลับเท่านั้น จากระยะไกลจะเพิ่ม IP เกตเวย์ Docker (172.28.0.1) ที่กำหนดไว้ในไฟล์เขียนนักเทียบท่า หากคุณใช้การกำหนดค่าที่ไม่ใช่ค่าเริ่มต้น คุณต้องเพิ่มไฟร์วอลล์และที่อยู่พร็อกซีย้อนกลับทั้งหมดลงในอาร์เรย์ KnownProxies
ในการกำหนดค่าเซิร์ฟเวอร์
หากคุณไม่สามารถกำหนดค่า Reverse Proxies ได้อย่างถูกต้อง อย่างน้อยคุณสามารถบังคับใช้รูปแบบ HTTPS ได้โดยการตั้งค่า Force Client HTTPS
ในหน้าการกำหนดค่าเซิร์ฟเวอร์
สามารถดูเอกสารฉบับเต็มของ Microsoft ในหัวข้อนี้ได้ที่นี่: https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer
ข้อมูลสำหรับ Remotely จะถูกบันทึกไว้ในคอนเทนเนอร์ภายใต้ /app/AppData
ซึ่งจะติดตั้งไว้ที่ /var/www/remotely/
บนโฮสต์ Docker ของคุณ
โฟลเดอร์นี้จะมี Remotely.db และบันทึกที่สร้างโดยเซิร์ฟเวอร์
ไฟล์เหล่านี้จะคงอยู่ผ่านการรื้อถอนและการตั้งค่าคอนเทนเนอร์ระยะไกลใหม่
หากอัปเกรดจาก Remotely เวอร์ชันที่ไม่ใช่ Docker ให้เขียนทับไฟล์ DB จากการติดตั้งครั้งก่อนของคุณ
ใช้แคดดี้เป็นพร็อกซีย้อนกลับหากคุณต้องการเปิดเผยไซต์กับอินเทอร์เน็ต
หากนี่เป็นครั้งแรก ให้สร้างบัญชีของคุณโดยคลิกปุ่ม Register
ในหน้าหลัก
องค์กรใช้เพื่อจัดกลุ่มผู้ใช้ อุปกรณ์ และรายการข้อมูลอื่นๆ ไว้ในกลุ่มเดียว
ตามค่าเริ่มต้น จะมีเพียงองค์กรเดียวเท่านั้นที่สามารถมีอยู่บนเซิร์ฟเวอร์ได้
ปุ่ม Register
จะหายไป
ผู้คนจะไม่สามารถสร้างบัญชีด้วยตนเองได้อีกต่อไป
หากต้องการอนุญาตการลงทะเบียนด้วยตนเอง ให้เพิ่ม MaxOrganizationCount
หรือตั้งค่าเป็น -1 (ดูส่วนการกำหนดค่า)
บัญชีนี้จะเป็นทั้งผู้ดูแลเซิร์ฟเวอร์และผู้ดูแลระบบองค์กร
องค์กรจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับบัญชี
คุณสามารถเปิดใช้งานการบันทึก HTTP เพื่อดูคำขอและการตอบกลับทั้งหมดในบันทึกของเซิร์ฟเวอร์ รวมถึงส่วนหัวด้วย สิ่งนี้มีประโยชน์สำหรับการแก้ไขข้อบกพร่องของพร็อกซีย้อนกลับ, API หรือ SignalR สามารถเปิดใช้งานตัวเลือกนี้ได้ในหน้าการกำหนดค่าเซิร์ฟเวอร์
หลังจากเปลี่ยนแปลงข้างต้น คุณต้องรีสตาร์ทคอนเทนเนอร์เพื่อให้การเปลี่ยนแปลงมีผล
ขั้นตอนต่อไปนี้จะกำหนดค่าเครื่อง Windows 11 ของคุณสำหรับการสร้างเซิร์ฟเวอร์และไคลเอนต์ระยะไกล
ติดตั้ง Visual Studio 2022
.NET SDK (เวอร์ชันล่าสุด)
MSBuild (ซึ่งเลือกคอมไพเลอร์ Roslyn โดยอัตโนมัติ)
เป้าหมาย NuGet และสร้างงาน
.NET Framework 4.8 SDK
สำหรับการดีบักและการพัฒนา คุณจะต้องมีปริมาณงานที่เกี่ยวข้องทั้งหมด
ASP.NET และการพัฒนาเว็บ
การพัฒนาเดสก์ท็อป .NET
การพัฒนาข้ามแพลตฟอร์ม .NET Core
ลิงค์: https://visualstudio.microsoft.com/downloads/
คุณควรเลือกปริมาณงานต่อไปนี้:
คุณควรเลือกองค์ประกอบส่วนบุคคลต่อไปนี้:
ติดตั้ง Git สำหรับ Windows
ลิงค์: https://git-scm.com/downloads
ติดตั้งโหนด LTS ล่าสุด:
ลิงค์: https://nodejs.org/
โคลนที่เก็บ git: git clone https://github.com/immense/Remotely --recurse
เมื่อทำการดีบัก เอเจนต์จะใช้ ID อุปกรณ์ที่กำหนดไว้ล่วงหน้าและเชื่อมต่อกับ https://localhost:5001
ในสภาพแวดล้อมการพัฒนา เซิร์ฟเวอร์จะมอบหมายตัวแทนที่เชื่อมต่อทั้งหมดให้กับองค์กรแรก
สองข้อข้างต้นอนุญาตให้คุณดีบักเอเจนต์และเซิร์ฟเวอร์ร่วมกัน และดูอุปกรณ์ของคุณในรายการ
บัญชีแรกที่สร้างขึ้นจะเป็นผู้ดูแลระบบสำหรับทั้งเซิร์ฟเวอร์และองค์กรที่สร้างขึ้นสำหรับบัญชี
ผู้ดูแลระบบองค์กรสามารถเข้าถึงหน้าองค์กรและรายการบันทึกเซิร์ฟเวอร์เฉพาะสำหรับองค์กรของตน ผู้ดูแลระบบเซิร์ฟเวอร์สามารถเข้าถึงหน้าการกำหนดค่าเซิร์ฟเวอร์และสามารถดูรายการบันทึกเซิร์ฟเวอร์ที่ไม่ได้เป็นขององค์กรได้
ภายในส่วนบัญชี จะมีแท็บสำหรับการสร้างแบรนด์ซึ่งจะนำไปใช้กับไคลเอนต์การสนับสนุนด่วนและตัวติดตั้ง Windows
อย่างไรก็ตาม ไคลเอนต์จะต้องถูกสร้างขึ้นจากแหล่งที่มาด้วย URL ของเซิร์ฟเวอร์ที่ฮาร์ดโค้ดในแอปเพื่อให้สามารถดึงข้อมูลแบรนด์ได้
ผู้ให้บริการฐานข้อมูล สตริงการเชื่อมต่อ และพอร์ต ASP.NET Core สามารถกำหนดค่าได้ผ่านตัวแปรสภาพแวดล้อมใน docker-compose.yml
การกำหนดค่าอื่นๆ ทั้งหมดเสร็จสิ้นในหน้าการกำหนดค่าเซิร์ฟเวอร์เมื่อคุณเข้าสู่ระบบแล้ว
AllowApiLogin: ว่าจะอนุญาตให้เข้าสู่ระบบผ่านตัวควบคุม API หรือไม่ ขอแนะนำให้ใช้โทเค็นการเข้าถึง API สำหรับแนวทางนี้
อุปกรณ์ที่ถูกแบน: อาร์เรย์ของ ID อุปกรณ์ ชื่อ หรือที่อยู่ IP ที่จะแบน เมื่อพวกเขาพยายามเชื่อมต่อ คำสั่งถอนการติดตั้งจะถูกส่งกลับทันที
DataRetentionInDays: ระยะเวลาที่บันทึกและข้อมูลอื่นๆ จะถูกเก็บไว้บนเซิร์ฟเวอร์ ตั้งค่าเป็น -1 เพื่อคงไว้โดยไม่มีกำหนด (ไม่แนะนำ)
DBProvider: กำหนดว่าจะใช้สตริงการเชื่อมต่อใดจากสามสาย (ที่ด้านบน) ผู้ให้บริการฐานข้อมูลที่เหมาะสมสำหรับประเภทฐานข้อมูลจะถูกโหลดในโค้ดโดยอัตโนมัติ
EnableWindowsEventLog: จะเพิ่มรายการบันทึกเซิร์ฟเวอร์ลงในบันทึกเหตุการณ์ Windows ด้วยหรือไม่
EnforceAtendingAccess: ลูกค้าจะได้รับแจ้งให้อนุญาตความพยายามในการควบคุมระยะไกลแบบอัตโนมัติ
EnableRemoteControlRecording: ว่าจะบันทึกการบันทึกเซสชันการควบคุมระยะไกลบนเซิร์ฟเวอร์หรือไม่
พวกเขาจะถูกบันทึกไว้ใน /app/AppData/recordings
การเก็บรักษาจะอยู่ภายใต้การควบคุมของ DataRetentionInDays
ForceClientHTTPS: บังคับให้ผู้ติดตั้งและไคลเอ็นต์เดสก์ท็อปใช้รูปแบบ HTTPS แม้ว่าส่วนหัวที่ส่งต่อจะกำหนดค่าไม่ถูกต้องก็ตาม
KnownProxies: หาก Reverse Proxy ของคุณอยู่บนเครื่องอื่นและกำลังส่งต่อคำขอไปยังเซิร์ฟเวอร์ระยะไกล คุณจะต้องเพิ่ม IP ของ Reverse Proxy Server ให้กับอาร์เรย์นี้
MaxOrganizationCount: ตามค่าเริ่มต้น องค์กรหนึ่งสามารถมีอยู่บนเซิร์ฟเวอร์ได้ ซึ่งจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการลงทะเบียนบัญชีแรก หลังจากนั้น การลงทะเบียนด้วยตนเองจะถูกปิดใช้งาน
ตั้งค่านี้เป็น -1 หรือเพิ่มเป็นตัวเลขเฉพาะเพื่ออนุญาตให้มีการเช่าหลายรายการ
RedirectToHttps: ASP.NET Core จะเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดจาก HTTP ไปยัง HTTPS หรือไม่ ซึ่งไม่ขึ้นอยู่กับการกำหนดค่า Caddy, Nginx และ IIS ที่ทำเช่นเดียวกัน
RemoteControlNotifyUsers: จะแสดงการแจ้งเตือนแก่ผู้ใช้เมื่อเริ่มเซสชันการควบคุมระยะไกลโดยไม่มีใครดูแลหรือไม่
RemoteControlRequiresAuthentication: ไม่ว่าหน้าการควบคุมระยะไกลจำเป็นต้องมีการรับรองความถูกต้องเพื่อสร้างการเชื่อมต่อหรือไม่
Require2FA: กำหนดให้ผู้ใช้ตั้งค่า 2FA ก่อนจึงจะสามารถใช้แอปหลักได้
Smpt-: การตั้งค่า SMTP สำหรับอีเมลระบบที่สร้างขึ้นอัตโนมัติ (เช่น การลงทะเบียนและการรีเซ็ตรหัสผ่าน)
ธีม: ธีมสีที่จะใช้สำหรับไซต์ ค่าคือ "สว่าง" หรือ "มืด" นอกจากนี้ยังสามารถกำหนดค่าต่อผู้ใช้ได้ในบัญชี - ตัวเลือก
TrustedCorsOrigins: สำหรับคำขอ API ข้ามต้นทางผ่าน JavaScript เว็บไซต์ที่อยู่ในอาร์เรย์นี้ได้รับอนุญาตให้ส่งคำขอไปยัง API ได้ การดำเนินการนี้ไม่ได้ให้การรับรองความถูกต้อง ซึ่งยังคงจำเป็นกับปลายทางส่วนใหญ่
UseHsts: ว่า ASP.NET Core จะใช้ HTTP Strict Transport Security หรือไม่
UseHttpLogging: เปิดใช้งานการบันทึกสำหรับคำขอ HTTP ทั้งหมด ยังเปิดใช้งานรายการบันทึกเพิ่มเติมใน ClientDownloadsController
เกี่ยวกับรูปแบบที่มีประสิทธิภาพ โฮสต์ และที่อยู่ IP ระยะไกลอันเป็นผลมาจากการประมวลผลส่วนหัวที่ส่งต่อ
คุณต้องตั้งค่าระดับการบันทึกอย่างชัดเจนสำหรับ Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware
เพื่อให้สิ่งนี้ทำงานได้ ดู appsettings.json สำหรับตัวอย่าง
ตามค่าเริ่มต้น จากระยะไกลจะใช้ฐานข้อมูล SQLite เมื่อรันครั้งแรก มันจะสร้างไฟล์ตามที่ระบุไว้สำหรับสตริงการเชื่อมต่อ SQLite ใน appsettings.json
คุณสามารถเปลี่ยนฐานข้อมูลได้โดยเปลี่ยน DBProvider
ใน ApplicationOptions
เป็น SQLServer
หรือ PostgreSQL
บนไคลเอนต์ บันทึกจะถูกเก็บไว้ใน %ProgramData%RemotelyLogs
ภายในคอนเทนเนอร์เซิร์ฟเวอร์ บันทึกจะถูกเขียนไปที่ /app/AppData/logs
ซึ่ง (โดยค่าเริ่มต้น) จะถูกเมานต์ที่ /var/www/remotely/Logs
บนโฮสต์
บันทึก ASP.NET Core ในตัวจะถูกเขียนไปยังคอนโซล (stdout) คุณสามารถเปลี่ยนเส้นทางไปยังไฟล์ได้หากต้องการ
ใน IIS สามารถทำได้ในไฟล์ web.config โดยการตั้งค่า stdoutLogEnabled เป็นจริง
บนเซิร์ฟเวอร์ Windows บันทึกข้างต้นสามารถเขียนลงในบันทึกเหตุการณ์ของ Windows ได้
สิ่งนี้เปิดใช้งานในการกำหนดค่าเซิร์ฟเวอร์โดยการตั้งค่า EnableWindowsEventLog เป็นจริง
คุณสามารถกำหนดค่าระดับการบันทึกและการตั้งค่าอื่นๆ ได้ใน appetttings.json
ข้อมูลเพิ่มเติม: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/
Windows: มีการทดสอบเฉพาะ Windows 11 เวอร์ชันล่าสุดเท่านั้น Windows 7 และ 8.1 ควรใช้งานได้ แต่ประสิทธิภาพจะลดลงใน Windows 7
Windows 2019/2022 ควรใช้งานได้เช่นกัน แต่ไม่มีการทดสอบเป็นประจำ
Linux: มีการทดสอบเฉพาะ Ubuntu เวอร์ชัน LTS ล่าสุดเท่านั้น
สำหรับไคลเอนต์ "การสนับสนุนด่วน" ของ Ubuntu คุณต้องติดตั้งการอ้างอิงต่อไปนี้ก่อน:
libc6-dev
libxtst-dev
เอ็กซ์คลิป
libx11-dev
libxrandr-dev
ตามหลักการแล้ว คุณควรควบคุมระยะไกลจากคอมพิวเตอร์หรือแล็ปท็อปจริงๆ อย่างไรก็ตาม ฉันได้พยายามทำให้รีโมตคอนโทรลสามารถใช้งานได้จากอุปกรณ์เคลื่อนที่เป็นอย่างน้อย นี่คือการควบคุม:
คลิกซ้าย: แตะครั้งเดียว
คลิกขวา: กดค้างไว้แล้วปล่อย
คลิกแล้วลาก: กดค้างไว้แล้วลาก
มีเพจอยู่ที่ /get-support
ซึ่งผู้ใช้สามารถขอรับการสนับสนุนได้ เมื่อส่งแบบฟอร์มแล้ว การแจ้งเตือนจะปรากฏบนหน้าหลัก เหนือตาราง
ทางลัดไปยังหน้านี้อยู่ในโฟลเดอร์ Program FilesRemotely
คุณสามารถคัดลอกได้ทุกที่ที่คุณต้องการ คุณยังสามารถคัดลอกไปยังเดสก์ท็อปได้โดยอัตโนมัติโดยใช้สวิตช์ -supportshortcut
บนตัวติดตั้ง
.NET มีสองวิธีในการปรับใช้: ขึ้นอยู่กับเฟรมเวิร์กและมีอยู่ในตัวเอง
การปรับใช้ขึ้นอยู่กับเฟรมเวิร์กจำเป็นต้องติดตั้งรันไทม์ .NET บนคอมพิวเตอร์เป้าหมาย ต้องเป็นเวอร์ชันเดียวกับที่ใช้สร้างแอป
การใช้งานแบบครบวงจรจะมีสำเนาของรันไทม์ด้วย ดังนั้นคุณไม่จำเป็นต้องติดตั้งลงในคอมพิวเตอร์เป้าหมาย ส่งผลให้ขนาดไฟล์รวมใหญ่ขึ้นมาก
.NET ใช้ตัวระบุรันไทม์ที่มีการกำหนดเป้าหมายเมื่อสร้าง
ลิงค์: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
มีปุ่มลัดบางปุ่มให้ใช้งานได้เมื่อใช้คอนโซล
/ : Slash จะช่วยให้คุณสามารถสลับระหว่างกระสุนได้ ชื่อสามารถกำหนดค่าได้ในหน้าตัวเลือก
ขึ้น/ลง: ใช้ลูกศรขึ้น/ลงเพื่อวนดูประวัติอินพุต
Ctrl + Q: ล้างหน้าต่างเอาต์พุต
พอร์ตโฮสต์ (ด้านซ้าย) สามารถกำหนดค่าได้ใน docker-compose.yml
ไม่ควรเปลี่ยนพอร์ตคอนเทนเนอร์ (ด้านขวา) ดูเอกสารการเขียนเพื่อดูรายละเอียด
จากระยะไกลมี API พื้นฐานซึ่งสามารถเรียกดูได้ที่ https://{your_server_url}/swagger
ตำแหน่งข้อมูลส่วนใหญ่จำเป็นต้องมีการรับรองความถูกต้องผ่านโทเค็นการเข้าถึง API ซึ่งสามารถสร้างได้โดยไปที่บัญชี - การเข้าถึง API
เมื่อเข้าถึง API จากเบราว์เซอร์บนเว็บไซต์อื่น คุณจะต้องตั้งค่า CORS ในการตั้งค่าแอปโดยเพิ่ม URL ต้นทางของเว็บไซต์ลงในอาร์เรย์ TrustedCorsOrigins หากคุณไม่คุ้นเคยกับวิธีการทำงานของ CORS ฉันขอแนะนำให้อ่านก่อนดำเนินการต่อ ตัวอย่างเช่น หากฉันต้องการสร้างแบบฟอร์มเข้าสู่ระบบบน https://exmaple.com ที่เข้าสู่ระบบ Remotely API ฉันจะต้องเพิ่ม "https://example.com" ลงใน TrustedCorsOrigins
คำขอแต่ละรายการไปยัง API จะต้องมีส่วนหัวชื่อ "X-Api-Key" ค่าควรเป็นรหัสและข้อมูลลับของคีย์ API โดยคั่นด้วยเครื่องหมายโคลอน (เช่น [ApiKey]:[ApiSecret])
ด้านล่างนี้เป็นตัวอย่างคำขอ API:
POST https://localhost:5001/API/Scripting/ExecuteCommand/PSCore/f2b0a595-5ea8-471b-975f-12e70e0f3497 HTTP/1.1 Content-Type: application/json X-Api-Key: 31fb288d-af97-4ce1-ae7b-ceebb98281ac:HLkrKaZGExYvozSPvcACZw9awKkhHnNK User-Agent: PostmanRuntime/7.22.0 Accept: */* Cache-Control: no-cache Host: localhost:5001 Accept-Encoding: gzip, deflate, br Content-Length: 12 Connection: close Get-Location
ด้านล่างนี้คือตัวอย่างการใช้ API การเข้าสู่ระบบแบบอิงคุกกี้ (JavaScript):
// Log in with one request, then launch remote control with another. fetch("https://localhost:5001/api/Login/", { method: "post", credentials: "include", mode: "cors", body: '{"email":"[email protected]", "password":"P@ssword1"}', headers: { "Content-Type": "application/json", } }).then(response=>{ if (response.ok) { fetch("https://localhost:44351/api/RemoteControl/Viewer/b68c24b0-2c67-4524-ad28-dadea7a576a4", { method: "get", credentials: "include", mode: "cors" }).then(response=>{ if (response.ok) { response.text().then(url=>{ window.open(url); }) } }) } }) // Log in and launch remote control in the same request. fetch("https://localhost:5001/api/RemoteControl/Viewer/", { method: "post", credentials: "include", mode: "cors", body: '{"email":"[email protected]", "password":"P@ssword1", "deviceID":"b68c24b0-2c67-4524-ad28-dadea7a576a4"}', headers: { "Content-Type": "application/json", } }).then(response=>{ if (response.ok) { response.text().then(url=>{ window.open(url); }) } })
Alerts API ช่วยให้คุณสามารถเพิ่มฟังก์ชันการตรวจสอบและแจ้งเตือนไปยังตำแหน่งข้อมูลอุปกรณ์ของคุณได้ คุณสมบัตินี้มีจุดมุ่งหมายเพื่อเพิ่มฟังก์ชันการทำงานประเภท RMM พื้นฐานโดยไม่เบี่ยงเบนไปจากวัตถุประสงค์หลักของ Remotely มากเกินไป
สามารถตั้งค่าการแจ้งเตือนให้แสดงการแจ้งเตือนบนเว็บไซต์ Remotely ส่งอีเมล และ/หรือดำเนินการคำขอ API แยกต่างหากได้
หากต้องการใช้การแจ้งเตือน คุณต้องสร้างโทเค็น API (หรือหลายโทเค็น) เพื่อให้อุปกรณ์ของคุณใช้งานได้ก่อน จากนั้นสร้างงานที่กำหนดเวลาไว้หรือสคริปต์ที่เกิดซ้ำอื่นๆ เพื่อทำงาน ด้านล่างนี้คือตัวอย่างวิธีใช้ PowerShell เพื่อสร้างงานที่กำหนดเวลาไว้ซึ่งจะตรวจสอบพื้นที่ดิสก์ในกำหนดการรายวัน
$Trigger = New-JobTrigger -Daily -At "5 AM" $Option = New-ScheduledJobOption -RequireNetwork Register-ScheduledJob -ScriptBlock { $OsDrive = Get-PSDrive -Name C $FreeSpace = $OsDrive.Free / ($OsDrive.Used + $OsDrive.Free) if ($FreeSpace -lt .1) { Invoke-WebRequest -Uri "https://localhost:5001/api/Alerts/Create/" -Method Post -Headers @{ X-Api-Key="3e9d8273-1dc1-4303-bd50-7a133e36b9b7:S+82XKZdvg278pSFHWtUklqHENuO5IhH" } -Body @" { "AlertDeviceID": "f2b0a595-5ea8-471b-975f-12e70e0f3497", "AlertMessage": "Low hard drive space. Free Space: $([Math]::Round($FreeSpace * 100))%", "ApiRequestBody": null, "ApiRequestHeaders": null, "ApiRequestMethod": null, "ApiRequestUrl": null, "EmailBody": "Low hard drive space for device Maker.", "EmailSubject": "Hard Drive Space Alert", "EmailTo": "[email protected]", "ShouldAlert": true, "ShouldEmail": true, "ShouldSendApiRequest": false } "@ -ContentType "application/json" } } -Name "Check OS Drive Space" -Trigger $Trigger -ScheduledJobOption $Option