PowerShell - การถ่ายโอนไฟล์ระยะไกลที่มีลำดับความสำคัญต่ำ


0

ฉันกำลังเขียนสคริปต์ PowerShell ที่ต้องสามารถดาวน์โหลดไฟล์ขนาดใหญ่จำนวนมากจากเซิร์ฟเวอร์จำนวนมาก (เช่นโฮสต์เซิร์ฟเวอร์ windows) ในครั้งเดียว เซิร์ฟเวอร์เหล่านี้จำนวนมากอาจใช้สำหรับกิจกรรมที่สำคัญและดังนั้นจึงเป็นสิ่งสำคัญที่วิธีการถ่ายโอนมีความสามารถในการจางหายไปเป็นพื้นหลังเมื่อโหลดบนเซิร์ฟเวอร์เริ่มสูงขึ้น

นี่คือวิธีการถ่ายโอน 3 วิธีที่ฉันรู้พร้อมกับสาเหตุที่ฉันไม่คิดว่ามันดีพอสำหรับงาน

BitsTransfer : สิ่งแรกที่นึกได้คือ BitsTransfer ( https://docs.microsoft.com/en-us/powershell/module/bitstransfer/start-bitstransfer?view=win10-ps ) อย่างไรก็ตามมีปัญหาร้ายแรงเกี่ยวกับวิธีการนี้เนื่องจากไม่สามารถถ่ายโอนไฟล์ที่ใช้เพื่อเขียนโดยกระบวนการอื่นและไฟล์จำนวนมากที่ต้องดาวน์โหลดจากเซิร์ฟเวอร์จะอยู่ใน สถานะ. ดู start-bitstransfer: กระบวนการไม่สามารถเข้าถึงไฟล์ได้เนื่องจากกำลังถูกใช้โดยกระบวนการอื่น สำหรับปัญหานั้น ...

คัดลอกรายการ : สิ่งนี้ไม่ให้ความสำคัญกับการควบคุมดังนั้นจึงมีความเป็นไปได้ที่การถ่ายโอนไฟล์ขนาดใหญ่อาจทำให้เซิร์ฟเวอร์หยุดชะงักในขณะที่กำลังประมวลผลการโหลดที่สำคัญ

robocopy : อีกครั้งฉันไม่เห็นการกล่าวถึงลำดับความสำคัญหรือการประมวลผลเบื้องหลัง

คำตอบ:


0

คุณควรมองหาการประมวลผลแบบหลายเธรดแบบขนานงานแบ็คกราวน์งานรันสเปซและงานด้ายสำหรับกรณีการใช้งาน

https://randombrainworks.com/2018/01/28/powershell-background-jobs-runspace-jobs-thread-jobs

รหัสของคุณควรตรวจสอบก่อนว่าไฟล์มีการใช้งานอยู่หรือไม่และข้ามไฟล์หากเป็นและวางไว้ในคอลเล็กชันคุณจะต้องใช้เพื่อกลับมาลองอีกครั้ง

แต่ดูเหมือนว่าคุณกำลังขอการควบคุมปริมาณแบบไดนามิกตามสถานะการใช้ทรัพยากรของเซิร์ฟเวอร์นั่นก็หมายความว่าคุณจะต้องมีรหัสแยกต่างหากเพื่อตรวจสอบสถานะของทรัพยากรนั้นก่อนดำเนินการใด ๆ และ IMHO การเข้าคิวนั้นใกล้เคียงกับคุณมากที่สุด ได้รับ

https://dille.name/blog/2015/09/08/processing-a-queue-using-parallel-powershell-jobs-with-throttling

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.