BITS ve PowerShell Kullanarak Büyük Dosyaları Güvenilir Olmayan Bir Ağ Üzerinden Kopyalama
Kural olarak, yerel ve küresel ağlarda dosyalar cihazlar arasında SMB, FTP veya HTTP protokolleri kullanılarak aktarılır. Tüm bu protokollerin sorunu, ağ yavaş veya güvenilmez olduğunda daha da kötü olabilen, büyük dosyaların indirilmesine devam edilmesiyle ilgili bazı sorunlardır. Ayrıca, bu protokolleri kullanarak dosyaları kopyalarken, bir sunucu ile bir alıcı arasındaki mevcut tüm bant genişliği kullanılır, bu da ağ performansını ve diğer ağ uygulamalarının çalışmasını olumsuz etkileyebilir (ağda doğru QoS politikalarını yapılandırmak her zaman mümkün değildir). teçhizat). Bu makalede, yavaş veya kararsız bir ağ üzerinden büyük dosyaları kopyalamak için BITS protokolünü ve PowerShell'i nasıl kullanacağımızı ele alacağız.
BITS Protokolü
BITS (Arka Plan Akıllı Aktarım hizmeti), sistemler arasında dosya aktarımı için kullanılan bir Windows hizmetidir. BITS protokolünü kullanarak dosyaları indirebilir ve karşıya yükleyebilirsiniz. Bu protokol, bilgisayarlar tarafından otomatik Windows güncellemelerini gerçekleştirirken sunuculardan dosya alırken (bir WSUS sunucusundan güncellemeleri indirirken durum dahil), SCCM dağıtım noktalarından program alırken vb. kullanılır.
BITS Protokolünün Avantajları:
BITS, iletişim kanalının kullanılan bant genişliğini kontrol edebilen ve diğer ağ uygulamalarının ve hizmetlerinin çalışmasını etkilemeyen akıllı protokoldür. BITS yalnızca serbest (ayrılmamış) bant genişliğini kullanabilir ve aktarım sırasında veri hızını dinamik olarak değiştirebilir (diğer uygulamalar ağ kullanımını artırırsa, BITS istemcisi ağ üzerinden veri aktarım hızını azaltabilir);
Dosya indirme, kullanıcıya şeffaf olan arka plan modunda devam edebilir;
-
Devam modundaki BITS işi, bilgisayar ile istemci arasındaki iletişim kanalı kesilse veya bilgisayar yeniden başlatıldıktan sonra bile otomatik olarak devam edecektir;
Veri kaybetmeden BITS ile indirmeyi duraklatabilir veya devam ettirebilirsiniz;
Not. Ağ üzerinden dosya kopyalamaya devam etme özelliği, bağlantı kesilirse dosyayı indirmeye devam etmenize izin veren robocopy.exe yardımcı programında da mevcuttur.
BITS, indirme işlerinin önceliklerini yönetmenize olanak tanır;
Bilgisayarlar arasında dosya aktarımı 80 (HTTP) veya 443 (HTTPS) bağlantı noktalarında gerçekleşir, böylece güvenlik duvarlarında ek bağlantı noktaları açmanız gerekmez. Örneğin, SMB protokolü üzerinden dosya kopyalarken kullanılan port 445 (SMB 1.0 protokolünün eski sürümünde birçok güvenlik açığı olduğunu unutmayın);
Dağıtılmış bir IIS sunucusu, BITS alıcısı ve sunucu tarafında zorunlu olarak gerekli değildir.
Bu nedenle BITS, büyük dosyaları yavaş ve kararsız ağlar (uydu kanalı, GPRS bağlantısı vb.) üzerinden aktarmak için tercih edilen protokoldür.
BITS: İşletim Sistemi ve PowerShell Sürüm Gereksinimleri
bitsadmin.exe yardımcı programının BITS görevlerini yönetmek için kullanılabildiği Windows XP'de BITS protokolü ortaya çıktı. Yardımcı program hala desteklenmektedir, ancak kullanımdan kaldırılmıştır. BITS işlerini yönetmek için özel PowerShell cmdlet'lerinin kullanılması tercih edilir.
Bu senaryoda çalışmak için Windows Vista veya Windows Server 2008'den düşük olmayan ve PowerShell 2.0 veya daha yeni bir işletim sistemine ihtiyacınız var. Windows 10 ve Windows Server 2016/2012 R2'nin modern sürümleri BITS'yi tamamen destekler.
İpucu. Windows Server 2003 kullanmak da mümkündür. Bu durumda KB 923845 güncellemesini ve PowerShell 2.0'ı yüklemeniz gerekecektir.
BITS desteği hem istemci hem de sunucu tarafında gereklidir.
PowerShell Kullanarak BITS Protokolü Üzerinden Dosya Nasıl İndirilir?
IIS HTTP sunucusunda (http://10.1.1.18/erd65_32.iso) depolanan büyük bir ISO dosyasını indirmek istediğinizi varsayalım. Bu URL'ye anonim erişime izin verildiği varsayılmaktadır (daha sonra kimlik doğrulaması ile URL'ye erişimi ele alacağız).
Her şeyden önce, PowerShell oturumunuzda BITS modülünü içe aktarın:
Import-Module BitsTransferModül içe aktarıldıktan sonra, mevcut tüm komutların listesi aşağıdaki gibi görüntülenebilir:
get-command *-BITS*Gördüğünüz gibi, kullanılabilir 8 cmdlet var:
- Add-BitsFile
- Complete-BitsTransfer
- Get-BitsTransfer
- Remove-BitsTransfer
- Resume-BitsTransfer
- Set-BitsTransfer
- Start-BitsTransfer
- Suspend-BitsTransfer
BITS Kullanarak Bilgisayarlar Arasında Eş Zamanlı Dosya Aktarımı
Start-BitsTransfer cmdlet'i, dosyaları HTTP(ler) (Invoke-WebRequest cmdlet'i gibi) ve ağ paylaşımlı klasörlerinden (SMB aracılığıyla) indirmenize olanak tanır. BITS protokolünü kullanarak belirtilen URL'den bir dosya indirmek ve yerel C:\Temp dizinine kaydetmek için şu komutu kullanın:
Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp"Bu, Arka Plan Akıllı Aktarım hizmetini (BITS) kullanan bir dosya aktarımıdır" mesajı, belirtilen dosyanın BITS kullanılarak indirildiğini gösterir.
Bu durumda cmdlet, ISO dosyasını senkronize modda indirmeye başlamıştır. İndirme işlemi, Dosya Gezgini aracılığıyla veya Öğeyi Kopyala cmdlet'ini kullanarak olağan bir dosya kopyalama işlemine benzer. Ekranda indirme durumunu gösteren bir ilerleme çubuğu görüntülenir. Bilgisayar yeniden başlatılırsa indirme işlemi devam etmez (dosyanın tamamını yeniden indirmeniz gerekir).
Asenkron Modda BITS ile Büyük Dosyaları Ağ Üzerinden Aktarma
BITS indirmesi eşzamansız modda da başlatılabilir. Bunu yapmak için, yukarıda gösterilen komuta -eşzamansız parametresini ekleyin. Bu modda, bir şey olursa (sunucu veya istemcinin yeniden başlatılması, iletişim kanalının kesilmesi vb.), kaynak geri yüklendikten sonra BITS işi otomatik olarak devam edecek ve bağlantı kesildiği andan itibaren dosya indirme işlemi devam edecektir:
Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronousÖnemli. Varsayılan olarak, Start-BitsTransfer, Ön Plan önceliğiyle (mümkün olan en yüksek olan) çalışır. Bu modda başlatılan indirme işleminin, kanal bant genişliği için diğer işlemlerle rekabet edeceği varsayılmaktadır. Bundan kaçınmak için, komutun bir argümanı olarak başka herhangi bir önceliği açıkça ayarlamanız gerekir, örn. g., -Öncelik düşük:
Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority lowEşzamansız BITS görevi arka planda çalışır ve dosya indirme işlemi ekranda görüntülenmez. BITS işinin durumu Get-BitsTransfer komutu kullanılarak PowerShell konsolundan alınabilir:
Get-BitsTransfer | flKomut, aktarım durumunu (bu durumda aktarım bitti: Aktarıldı), aktarılan bayt sayısı, toplam dosya boyutu, dosyanın oluşturulma zamanı ve görevin tamamlanma zamanı hakkındaki bilgileri döndürür.
Bilgisayarda çalışan tüm BITS görevlerinin durumunu tablo biçiminde görüntüleyebilirsiniz:
Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSizeEşzamansız aktarım modunu kullanırken, TMP uzantılı geçici bir dosya oluşturulur (varsayılan olarak, Windows Gezgini'nde gizlidir). Bunu kaynak dosyaya (kaynak sunucuda depolanan) dönüştürmek için Complete-BitsTransfer komutunu çalıştırın:
Get-BitsTransfer | Complete-BitsTransferBITS indirme görevi daha sonra tamamlanmış olarak kabul edilir ve işler listesinden kaldırılır.
Uzak bir Windows dosya sunucusundaki bir ağ paylaşımlı klasörüne yerel bir dosya yükleyebilirsiniz. Bunu yapmak için aşağıdaki komutu kullanın (kolaylık sağlamak için kopyalama işinin adını belirtebilirsiniz):
Start-BitsTransfer -Source C:\iso\w10_1809.iso -Destination \\manch-fs1\iso -Asynchronous -DisplayName CopyISOtoManBir BITS görevini geçici olarak askıya almak için şunu çalıştırın:
Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransferBITS işini sürdürmek için Resume-BitsTransfer cmdlet'ini kullanın:
Get-BitsTransfer -Name CopyISOtoMan | Resume-BitsTransfer -AsynchronousAdd-BitsFile cmdlet'ini kullanarak BITS görevine ek dosyalar ekleyebilirsiniz:
Get-BitsTransfer -Name CopyISOtoMan | Add-BitsFile -Source C:\iso\w10msu\* -Destination \\manch-fs1\iso -AsynchronousBilgisayardaki tüm BITS indirme görevlerini (diğer kullanıcılar tarafından başlatılanlar dahil) silmek için aşağıdaki komutu çalıştırın:
Get-BitsTransfer -Allusers|Remove-BitsTransferSistem hesabı altında çalışan BITS işlerini iptal edemezsiniz (hata 0x80070005 "İş iptal edilemiyor"). Böyle bir görevi iptal etmek için SİSTEM altındaki Remove-BitsTransfer komutunu çalıştırmanız gerekir.
Dosyanın depolandığı sunucu, kullanıcı kimlik doğrulaması gerektiriyorsa, aşağıdaki komut, kaynağa erişmek için kimlik bilgilerini belirtmek üzere bir pencerenin gösterilmesine izin verecektir:
Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low -Authentication NTLM -Credential Get-CredentialBir BITS görevinin sonuçlarını izlemeyi kolaylaştırmak için, görev ilerlemesini izlemeye izin veren ve birkaç saniyede bir ekranda indirme yüzdesini görüntüleyen basit bir komut dosyası kullanabilirsiniz. İndirme işlemi bittikten sonra komut dosyası, TMP dosyasını otomatik olarak kaynak biçime dönüştürür:
Import-Module BitsTransfer
$bitsjob = Start-BitsTransfer -Source http://10.1.1.18/erd65_32.iso -Destination c:\temp -Asynchronous
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Write-host $bitsjob.JobState.ToString()
$Proc = ($bitsjob.BytesTransferred / $bitsjob.BytesTotal) * 100
Write-Host $Proc “%”
Sleep 3
}
Complete-BitsTransfer -BitsJob $bitsjobBITS Kullanarak Dizin İçeriği Nasıl Kopyalanır?
Daha önce de belirttiğimiz gibi, BITS bir Web sunucusu gerektirmez ve bu, dosyaları doğrudan diğer Windows bilgisayarlarından veya ağ paylaşımlı klasörlerinden kopyalayabileceğimiz anlamına gelir:
Start-BitsTransfer -Source \\lon-rep01\os\RHEL4.8-x86_64-AS-DVD.iso -Destination c:\temp -AsynchronousBitsTransfer, belirli bir klasördeki tüm dosya ve klasörleri veya diğer programlar tarafından kullanılan dosyaları tekrar tekrar kopyalayamaz. Belirtilen ağ paylaşımlı klasöründeki tüm dosyaları ve alt dizinleri kopyalamak için bu komut dosyasını kullanın (önce hedef dizinin var olup olmadığını kontrol edebilir ve onu oluşturabilirsiniz):
Import-Module BitsTransfer
$Source="\\lond-rep01\share\"
$Destination="c:\tmp\"
if ( -Not (Test-Path $Destination))
{
$null = New-Item -Path $Destination -ItemType Directory
}
$folders = Get-ChildItem -Name -Path $source -Directory -Recurse
$bitsjob = Start-BitsTransfer -Source $Source\*.* -Destination $Destination -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
foreach ($i in $folders)
{
$exists = Test-Path $Destination\$i
if ($exists -eq $false) {New-Item $Destination\$i -ItemType Directory}
$bitsjob = Start-BitsTransfer -Source $Source\$i\*.* -Destination $Destination\$i -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
}PowerShell ve BITS Kullanarak HTTP Sunucusuna Dosya Nasıl Yüklenir?
BITS ile, bir dosyayı yalnızca bir HTTP sunucusundan indiremez, aynı zamanda uzak bir web sunucusuna da yükleyebilirsiniz. Bunu yapmak için Bits Sunucu Uzantısı bileşenine sahip IIS web sunucusunun hedef sunucuda kurulu olması gerekir. Bit Yüklemeleri bölümündeki IIS sanal dizini ayarlarında, "İstemcilerin dosya yüklemesine izin ver " seçeneğini etkinleştirmeniz gerekir.
Anonim kimlik doğrulama kullanıyorsanız, anonim kullanıcıların dizine NTFS izin düzeyinde yazmasına izin vermelisiniz. Dosya yüklemeleri yetkili kullanıcılar altında gerçekleştiriliyorsa, yükleme klasörüne RW izinleri vermeleri gerekir.
BITS protokolünü kullanarak bir HTTP sunucusuna dosya yüklemek için aşağıdaki komutu çalıştırın:
Start-bits -source c:\iso\winsrv2016.iso -destination http://10.1.1.18/MEDVImages/winsrv2016.iso -Transfertype UploadLütfen varsayılan olarak IIS'nin 30 MB'a kadar dosya yüklemenize izin verdiğini unutmayın. Büyük dosyaların yüklenmesine izin vermek için web.config dosyasındaki maxAllowContentLength parametresindeki değeri değiştirmeniz gerekir.
Bu nedenle, BITS özelliklerini kullanmak, SMB protokolünü kullanarak ağ üzerinden ortak dosya kopyalamaya harika bir alternatiftir. BITS dosya aktarım görevi, bağlantı kesintilerine veya bilgisayarın yeniden başlatılmasına rağmen gerçekleştirilir ve diğer uygulamalara müdahale etmeden bant genişliğini fazla işgal etmez. BITS protokolü, büyük ISO imajını ve sanal makine dosyalarını (vmdk, vhdx) bir WAN ağı üzerinden aktarmak için en uygun çözüm olabilir.







