Script PowerShell (GUI BitsTransfer)

Background Intelligent Transfer Service (BITS) permet de transférer des fichiers d’une source vers une destination.

Il règle plusieurs problèmes liés aux transferts de data :

Problème :

  • Perte de connectivité
  • Connexion lente
  • Gros volume de data
  • Redémarrage du serveur

 

Il est une sorte de gestionnaire de téléchargement inclus dans le système Windows.

Le script suivant permet de sélectionner un fichier source puis de l’envoyer dans un répertoire de destination. Dans le besoin, le script peut demander les credentials nécessaires pour accéder aux ressources.

Capture

Capture

Capture

Capture

Function Select-FolderDialog
 {
 param([string]$Description="Select Folder",[string]$RootFolder="Desktop")

[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
 Out-Null

$objForm = New-Object System.Windows.Forms.FolderBrowserDialog
 $objForm.Rootfolder = $RootFolder
 $objForm.Description = $Description
 $Show = $objForm.ShowDialog()
 If ($Show -eq "OK")
 {
 Return $objForm.SelectedPath
 }
 Else
 {
 Write-Error "Operation cancelled by user."
 }
 }

Function Select-FileDialog
 {
 param([string]$Title,[string]$Directory,[string]$Filter="All Files (*.*)|*.*")
 [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
 $objForm = New-Object System.Windows.Forms.OpenFileDialog
 $objForm.InitialDirectory = $Directory
 $objForm.Filter = $Filter
 $objForm.Title = $Title
 $Show = $objForm.ShowDialog()
 If ($Show -eq "OK")
 {
 Return $objForm.FileName
 }
 Else
 {
 Write-Error "Operation cancelled by user."
 }
 }

$source = Select-FileDialog
 $destination = Select-FolderDialog
 $destination = "$destination\"

Add-Type -assembly System.Windows.Forms

#title for the winform
 $Title = "BITS Transfer Progress"
 #winform dimensions
 $height=100
 $width=400
 #winform background color
 $color = "White"

#create the form
 $form1 = New-Object System.Windows.Forms.Form
 $form1.Text = $title
 $form1.Height = $height
 $form1.Width = $width
 $form1.BackColor = $color

$form1.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
 #display center screen
 $form1.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen

# create label
 $label1 = New-Object system.Windows.Forms.Label
 $label1.Text = "not started"
 $label1.Left=5
 $label1.Top= 10
 $label1.Width= $width - 20
 #adjusted height to accommodate progress bar
 $label1.Height=15
 $label1.Font= "Verdana"
 #optional to show border
 #$label1.BorderStyle=1

#add the label to the form
 $form1.controls.add($label1)

$progressBar1 = New-Object System.Windows.Forms.ProgressBar
 $progressBar1.Name = 'progressBar1'
 $progressBar1.Value = 0
 $progressBar1.Style="Continuous"

$System_Drawing_Size = New-Object System.Drawing.Size
 $System_Drawing_Size.Width = $width - 40
 $System_Drawing_Size.Height = 20
 $progressBar1.Size = $System_Drawing_Size

$progressBar1.Left = 5
 $progressBar1.Top = 40
 $form1.Controls.Add($progressBar1)
 $form1.Show()| out-null

#give the form focus
 $form1.Focus() | out-null

#update the form
 $label1.Text = "Preparing to send files"
 $form1.Refresh()

start-sleep -Seconds 1

get-module bitstransfer
 Start-BitsTransfer -Destination $destination -Source $source -Asynchronous -Credential (Get-Credential) -DisplayName "AutoTransfer" -Description "Transfert BI-TECH"

$bits = Get-BitsTransfer -Name "AutoTransfer"
 if ($bits.BytesTotal -ne $null){
 $pct = 0
 while ($bits.JobState -ne "Transferred" -and $pct -ne 100){
 if ($bits.jobstate -eq "Error" -or $bits.JobState -eq "TransientError" ){
 Resume-BitsTransfer -BitsJob $bits
 }

$pct = ($bits.BytesTransferred / $bits.BytesTotal)*100
 $progressbar1.Value = $pct
 Start-Sleep -Milliseconds 100
 $label1.text="Sending files..."
 $form1.Refresh()
 }
 Get-BitsTransfer | Complete-BitsTransfer
 }

$form1.Close()

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s