Salin file besar melalui jaringan menggunakan BITS dan PowerShell

Pada jaringan lokal (dan global), file antar sistem biasanya ditransfer menggunakan protokol SMB, FTP, atau HTTP. Masalah dengan semua protokol ini adalah sulitnya mengunduh file besar, yang dapat diperburuk oleh masalah pengiriman data melalui saluran yang lambat atau tidak stabil. Saat menyalin file menggunakan protokol ini, semua bandwidth yang tersedia dari saluran komunikasi antara server dan penerima biasanya digunakan, yang dapat secara negatif mempengaruhi kinerja jaringan dan aplikasi lain (tidak selalu mungkin untuk mengkonfigurasi kebijakan QoS yang benar di tingkat peralatan jaringan). Pada artikel ini kami akan mempertimbangkan kemungkinan menggunakan protokol. Bits dan cmdlet Powerhell untuk menyalin file besar melalui jaringan melalui saluran yang tidak stabil atau lambat.

Konten:

  • Protokol BITS
  • BITS: Persyaratan OS dan Versi PowerShell
  • Cara mengunduh file menggunakan protokol BITS menggunakan PowerShell
  • Sinkron mentransfer file antar komputer menggunakan BITS
  • Menggunakan BITS untuk secara asinkron menyalin file besar melalui jaringan
  • Menyalin seluruh konten jaringan berbagi melalui BITS
  • Mengunggah file ke server HTTP menggunakan PowerShell dan BITS

Protokol BITS

Bits atau Latar belakang Cerdas Transfer layanan - (Background Intelligent Transfer Service) adalah layanan Windows yang digunakan untuk mentransfer file antar sistem. Menggunakan protokol BITS, Anda dapat mentransfer unduhan dan unggah file. Sesuai dengan protokol ini bahwa komputer mengunduh file dari server saat melakukan pembaruan otomatis Windows (termasuk saat mengunduh pembaruan dari server WSUS), ketika menerima program dari titik distribusi SCCM, dll..

Manfaat Protokol BITS:

  • BITS adalah protokol cerdas yang, selama operasi, mampu mengatur bandwidth yang digunakan dari saluran komunikasi sehingga tidak mempengaruhi aplikasi dan layanan jaringan lainnya. BITS hanya dapat menggunakan bandwidth saluran yang tidak terisi dan secara dinamis mengubah kecepatan transfer data selama operasi (jika aplikasi lain menambah beban pada jaringan, BITS dapat mengurangi laju transfer data melalui jaringan);
  • Pengunduhan file dapat dilakukan di latar belakang, tanpa terlihat oleh pengguna;
  • Pekerjaan BITS dalam mode resume akan secara otomatis berlanjut meskipun saluran komunikasi antara komputer dan klien terputus, atau setelah komputer dinyalakan kembali;
  • Kapan saja, Anda dapat menjeda atau melanjutkan mengunduh melalui BITS tanpa kehilangan data;Catatan. Kemampuan untuk memulai kembali prosedur penyalinan file melalui jaringan juga tersedia di utilitas robocopy.exe, yang memungkinkan Anda untuk melanjutkan mengunduh file jika terjadi kegagalan koneksi.
  • BITS memungkinkan Anda untuk mengelola prioritas tugas boot;
  • Transfer file antar komputer terjadi pada port 80 (HTTP) atau 443 (HTTPS), jadi Anda tidak perlu membuka port tambahan di firewall. Misalnya, 445 port yang sedang disalin saat menggunakan protokol SMB (jangan lupa bahwa ada banyak kerentanan dalam versi yang lebih lama dari protokol SMB 1.0);
  • Di sisi penerima dan server, server IIS yang digunakan tidak diperlukan.

Dengan demikian, BITS adalah protokol optimal untuk mentransfer file besar melalui jaringan lambat dan tidak stabil (saluran satelit, koneksi GPRS, dll.).

BITS: Persyaratan OS dan Versi PowerShell

Protokol BITS pertama kali diperkenalkan kembali pada Windows XP, untuk mengelola pekerjaan BITS di mana dimungkinkan untuk menggunakan utilitas bitadmin.exe. Utilitas masih didukung, tetapi sudah usang. Untuk mengelola pekerjaan BITS, lebih baik menggunakan cmdlet PowerShell khusus.

Untuk bekerja dalam skenario ini, kita membutuhkan OS yang tidak lebih rendah dari Windows Vista atau Windows Server 2008, dan PowerShell tidak lebih rendah dari versi 2.0. Versi modern dari Windows 10 dan Windows Server 2016/2012 R2 sepenuhnya mendukung protokol BITS.

Kiat. Dimungkinkan untuk menggunakan Windows Server 2003. Dalam hal ini, Anda harus menginstal pembaruan khusus KB 923845 dan PowerShell V2.0.

Dukungan BITS diperlukan baik di sisi klien dan server.

Cara mengunduh file menggunakan protokol BITS menggunakan PowerShell

Misalkan Anda ingin mengunduh file ISO besar yang disimpan di server HTTP IIS (_http: //10.2.2.148/erd65_32.iso).

Diasumsikan bahwa akses anonim diizinkan untuk URL ini (di masa mendatang kami akan mempertimbangkan akses ke URL dengan otentikasi).

Pertama, muat modul dukungan BITS ke dalam sesi PowerShell:

Impor-Modul BitsTransfer

Setelah memuat modul, Anda dapat mendaftar semua perintah yang tersedia dari modul BitsTransfer:

dapatkan-perintah * -BITS *

Seperti yang Anda lihat, hanya 8 cmdlet yang tersedia:

  • Add-bitsfile
  • Lengkap-BitsTransfer
  • Dapatkan-BitsTransfer
  • Remove-BitsTransfer
  • Lanjutkan-BitsTransfer
  • Set-BitsTransfer
  • Mulai-BitsTransfer
  • Tangguhkan-BitsTransfer

Sinkron mentransfer file antar komputer menggunakan BITS

Cmdlet Mulai-BitsTransfer memungkinkan Anda untuk mengunduh file melalui HTTP (s) (juga cmdlet Invoke-WebRequest) dan dari folder jaringan bersama (via SMB). Untuk mengunduh file dari alamat URL yang ditentukan menggunakan protokol BITS dan menyimpannya ke direktori lokal C: \ Temp, gunakan perintah:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destinasi c: \ temp

Pesan Ini adalah transfer file yang menggunakan layanan Background Intelligent Transfer (BITS) mengatakan bahwa pengunduhan file yang ditentukan oleh protokol BITS telah dimulai.

Dalam contoh ini, cmdlet mengunduh file secara sinkron. Mengunduh file menyerupai prosedur penyalinan biasa melalui Explorer atau menggunakan cmdlet SalSh-item PoSh. Dalam hal ini, bilah kemajuan ditampilkan di layar, menunjukkan status unduhan. Ketika Anda me-restart komputer, unduhan tidak akan dilanjutkan (Anda harus mengunduh seluruh file lagi).

Menggunakan BITS untuk secara asinkron menyalin file besar melalui jaringan

Proses mengunduh file melalui BITS juga dapat dimulai dalam mode asinkron, untuk ini Anda perlu menambahkan parameter ke perintah di atas -tidak sinkron. Dalam mode ini, jika terjadi sesuatu selama pengunduhan file (me-reboot server, klien, memutuskan saluran komunikasi, dll.), Tugas akan secara otomatis berlanjut setelah pemulihan ketersediaan sumber dan pengunduhan file akan berlanjut sejak koneksi terputus.

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destinasi c: \ temp -asynchronous

Itu penting. Secara default, Start-BitsTransfer berfungsi dengan prioritas Foreground (setinggi mungkin). Diasumsikan bahwa mengunduh file yang diluncurkan dalam mode ini akan bersaing dengan proses lain untuk bandwidth saluran. Untuk menghindari ini, Anda harus secara eksplisit menentukan prioritas lain sebagai argumen untuk perintah, misalnya, -Prioritas rendah:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destinasi c: \ temp -asynchronous -Prioritas rendah

Pekerjaan BITS asinkron berjalan di latar belakang, dan proses mengeksekusi perintah unggah file tidak ditampilkan. Status pekerjaan BITS dapat diperoleh dari konsol PowerShell menggunakan perintah Get-BitsTransfer:

Get-BitsTransfer | fl

Perintah mengembalikan status transfer (dalam hal ini, jelas bahwa transfer selesai -Transferred), informasi tentang jumlah byte yang ditransfer, ukuran file total, waktu pembuatan dan waktu penyelesaian BITS.

Anda dapat melihat status semua pekerjaan BITS yang berjalan di komputer dalam bentuk tabel:

Get-BitsTransfer | pilih DisplayName, BytesTotal, BytesTransferred, JobState | Format-Tabel -AutoSize

Saat menggunakan mode transfer asinkron, file sementara dengan ekstensi TMP dibuat di direktori target (disembunyikan secara default di explorer). Untuk mengonversinya ke tipe file asli (yang disimpan di server sumber), Anda perlu menjalankan perintah Complete-BitsTransfer:

Get-BitsTransfer | Lengkap-BitsTransfer

Tugas unduhan BITS setelah itu dianggap selesai dan menghilang dari daftar tugas..

Anda dapat mengunggah file lokal ke folder jaringan bersama di server jarak jauh. Untuk melakukan ini, gunakan perintah berikut (untuk kenyamanan, Anda dapat menentukan nama pekerjaan salin):

Mulai-BitsTransfer -Sumber C: \ iso \ w101809.iso -Tujuan \\ ekt-fs1 \ iso -Sinkron -DisplayName CopyISOtoEKT

Untuk menangguhkan sementara pekerjaan BITS, lakukan:

Get-BitsTransfer -Name CopyISOtoEKT | Tangguhkan-BitsTransfer

Untuk melanjutkan pekerjaan, gunakan cmdlet Resume-BitsTransfer:

Get-BitsTransfer -Name CopyISOtoEKT | Lanjutkan-BitsTransfer -Asinkron

Anda dapat menambahkan file tambahan ke tugas BITS menggunakan cmdlet Add-BitsFile:

Get-BitsTransfer -Name CopyISOtoEKT | Add-BitsFile -Sumber C: \ iso \ w10msu \ * -Tujuan \\ ekt-fs1 \ iso -Asinkron

Untuk menghapus semua pekerjaan unduhan BITS di komputer (termasuk yang diluncurkan oleh pengguna lain), jalankan perintah:

Get-BitsTransfer -Allusers | Remove-BitsTransfer

Anda tidak dapat membatalkan pekerjaan BITS yang diluncurkan dari bawah Sistem (kesalahan 0x80070005 Tidak dapat membatalkan pekerjaan). Untuk membatalkan tugas ini, Anda perlu menjalankan perintah Remove-BitsTransfer dari bawah SYSTEM.

Jika server tempat file disimpan memerlukan otentikasi pengguna, Anda dapat memanggil jendela di mana Anda memerlukan kredensial untuk mengakses sumber daya:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destinasi c: \ temp -asynchronous -Prioritas rendah -Authentication NTLM -Kredensial Get-Credential

Untuk membuatnya lebih mudah untuk melacak hasil tugas BITS, Anda dapat menggunakan skrip sederhana yang memantau tugas dan menampilkan persentase pemuatan di layar setiap beberapa detik. Di akhir pengunduhan file, skrip secara otomatis mengkonversi file TMP ke format aslinya:

Impor-Modul BitsTransfer
$ job = Mulai-BitsTransfer -Sumber _http: //10.2.2.148/erd65_32.iso -Tujuan c: \ temp -Asynchronous
while (($ job.JobState.ToString () -eq 'Mentransfer') -atau ($ job.JobState.ToString () -eq 'Menghubungkan'))

Host-host $ Job.JobState.ToString ()
$ Pro = ($ job.BytesTransferred / $ job.BytesTotal) * 100
Host-Tulis $ Pro “%”
Tidur 3

Lengkap-BitsTransfer -BitsJob $ pekerjaan

Menyalin seluruh konten jaringan berbagi melalui BITS

Seperti yang telah kami katakan, BITS tidak memerlukan server Web untuk berfungsi, ini berarti Anda dapat menyalin file langsung dari komputer Windows lain atau folder jaringan bersama:

Mulai-BitsTransfer -Sumber \\ msk-rep01 \ os \ rhel-server-7.0-x86_64-dvd.iso -Tujuan c: \ temp -Asynchronous

Cmdlet modul BitsTransfer tidak dapat menyalin semua file dan folder secara rekursif dari direktori tertentu, atau file yang digunakan oleh program lain. Untuk menyalin semua file dengan subdirektori dari folder jaringan yang ditentukan, gunakan fungsi ini (Anda dapat memeriksa dulu apakah direktori target ada dan membuatnya):

Impor-Modul BitsTransfer
$ Source = "\\ msk-rep01 \ os \"
$ Destination = "c: \ tmp \"
if (-Not (Test-Path $ Destination))

$ null = Item Baru -Path $ Tujuan -ItemType Direktori

$ folder = Get-ChildItem -Name -Path $ source -Directory -Recurse
$ job = Mulai-BitsTransfer -Sumber $ Sumber \ *. * -Tujuan $ Tujuan -asinkron -Prioritas rendah
while (($ job.JobState.ToString () -eq 'Mentransfer') -atau ($ job.JobState.ToString () -eq 'Menghubungkan'))

Tidur 3

Lengkap-BitsTransfer -BitsJob $ pekerjaan
foreach ($ i dalam $ folder)

$ exist = Jalur Tes $ Tujuan \ $ i
if ($ exist -eq $ false) New-Item $ Destination \ $ i -ItemType Directory
$ job = Mulai-BitsTransfer -Sumber $ Sumber \ $ i \ *. * -Tujuan $ Tujuan \ $ i -asinkron -Prioritas rendah
while (($ job.JobState.ToString () -eq 'Mentransfer') -atau ($ job.JobState.ToString () -eq 'Menghubungkan'))

Tidur 3

Lengkap-BitsTransfer -BitsJob $ pekerjaan


Mengunggah file ke server HTTP menggunakan PowerShell dan BITS

Menggunakan BITS, Anda tidak hanya dapat mengunduh file dari server HTTP, tetapi juga mengunggahnya ke server web jarak jauh. Untuk melakukan ini, server web IIS dengan komponen yang diinstal harus diinstal pada sisi penerima Bits Server Ekstensi. Dalam pengaturan direktori virtual IIS di bagian Bits Unggah perlu mengaktifkan opsi "Izinkan klien untuk mengunggah file".

Jika Anda menggunakan otorisasi anonim, Anda harus mengizinkan pengguna anonim untuk menulis ke direktori di tingkat NTFS. Jika pengunduhan file dilakukan di bawah pengguna yang diotorisasi, mereka harus diberikan izin RW pada folder unduhan.

Untuk mengunggah file ke server HTTP menggunakan protokol BITS, jalankan perintah:

Start-bits -source c: \ iso \ win2016.iso -destination http://10.10.1.200/MEDVImages/win2016.iso -Transfertype Upload

Harap dicatat bahwa secara default, IIS memungkinkan Anda untuk mengunggah file hingga 30 MB. Untuk memungkinkan file besar diunggah, Anda perlu mengubah nilai dalam parameter maxAllowContentLength di file web.config.

Dengan demikian, menggunakan fitur BITS adalah alternatif yang sangat baik untuk menyalin file tradisional melalui jaringan menggunakan protokol SMB. Berbeda dengan yang terakhir, tugas menyalin file BITS dilakukan meskipun melepaskan dan me-reboot komputer, dan itu tidak memuat saluran komunikasi tanpa mengganggu pekerjaan aplikasi jaringan dan pengguna lainnya. Protokol BITS mungkin merupakan solusi optimal untuk mentransfer file gambar ISO besar dan file mesin virtual (vmdk, vhdx) melalui jaringan WAN.