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

Symfony sur IIS

Note : ce tuto fonctionne aussi bien sur une version Core de Windows.

Préparation de votre website :

Avant de commencer, suivre : Faire fonctionner PHP sous IIS

Dans un premier temps, télécharger Symfony

Extraire les fichiers dans un dossier dans C:\inetpub\wwwroot\

extraire

Lancer votre IIS management console

start console

Créer votre WebSite (Clique droit sur Site > Add WebSite)

Baser votre ServerRoot sur le dossier web de votre projet.

add website

Double clique sur Default Document, clique droit, add …

default page

Installer URL Rewrite :

Télécharger rewrite_amd64_en-US.msi

Supprimer l’extension .pptx du fichier téléchargé.

Placer ce fichier sur le C:\

Lancer une invite de commande (CTRL + R > cmd) et taper :

START /w msiexec /I C:\rewrite_amd64_en-US.msi

Paramétrer votre website :

Éditer votre fichier web.config qui se trouve dans C:\inetpub\wwwroot\nom_de_votre_projet\web\web.config

Ajouter ces lignes entre les balises <system.webServer>.

<rewrite>
    <rules>
        <rule name="Rewriter" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <conditions>
                <add input="{R:1}" pattern="^(app\\.php|favicon\\.ico)" ignoreCase="false" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
            </conditions>
            <action type="Rewrite" url="./app.php/{R:1}" appendQueryString="true" />
        </rule>
    </rules>
</rewrite>

Les finissions :

Tester votre configuration :

http://url_de_votre_serveur/config.php

test symfony

Il y a quelques problèmes concernant les droits sur les dossiers :

  • app/cache/
  • app/logs/

Pour régler ce problème, il faut modifier les droits NTFS sur ces dossiers :

Clique droit sur cache > propriété > sécurité > edit …

Ajouter au  groupe USERS le droit d’écrire.

droits cache

Faire la même chose pour le dossier LOG

Rafraichir la page config.php

retest symfony

Votre configuration IIS, permet de faire fonctionner symfony.

Faire fonctionner PHP sous IIS

Télécharger ces archives :

Supprimer les extensions .pptx et extraire les fichiers

extraire

Créer un dossier PHP dans C:\Program Files (x86)\ et coller le dossier extrait (v5.3)

v5.3

Installer IIS

select role

Dans application developpement sélectionner CGI

fonctionnalitées iis php

Lancer votre IIS management console

start console

Double clique sur Handler Mappings, faire un clique droit et cliquer sur add Module Mapping

IIS management CGI

add module mapping

Remplir la fenêtre comme sur la capture d’écran et cliquer sur OK

module mapping

Créer le FastCGI en cliquant sur YES

create FastCGI

Tester le fonctionnement en créant une page PHP.

Créer un fichier index.php dans C:\inetpub\wwwroot\

extension

Entrer ces lignes dans le fichier

<?php
phpinfo();
?>

Tester :

phpinfo()

Administrer IIS d’un Windows Server Core à partir d’un Windows en GUI

Windows Core

Sur le Windows Core, entrer ces commandes :

powershell

Import-Module ServerManager

Add-WindowsFeature Web-Mgmt-Service

Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1

Set-Service -name WMSVC -StartupType Automatic

Start-service WMSVC

Windows Core remote IIS

Windows GUI

Sur le Windows GUI installer la console IIS :

add server

select role

Décocher toutes les cases :

unselect

Ne garder que le Management console :

management console

Cliquer sur Installer :

console IIS

Lancer la console d’administration de IIS

start console

Faire un clique droit sur page start

page start

Entrer l’adresse sur serveur. Sur un domaine Active Directory : nom_de_la_machine.nom_du_domaine.tld

fqdn server

Entrer les identifiants de l’administrateur du domaine

credential

Accepter le certificat en cliquant sur Connect

certificate

Entrer un nom pour ce serveur et cliquer sur Finish

IIS server name console

Vous pouvez administrer votre IIS à partir du Windows en GUI.

remote IIS

Administrer Windows Server Core avec un Windows Server en interface graphique (GUI).

Préparation

Dans un premier temps, changeons le clavier en azerty et renommons les machines :

Set-WinUserLanguageList -LanguageList fr-FR

Rename-Computer -NewName « nom »

(cf Mémo PowerShell)

(Windows Core)

Windows Core

(Windows GUI)

Windows GUI

Fixons les adresses IP :

Windows Core :

Adresse IP : 192.168.33.201 /24

Passerelle : 192.168.33.2

Windows GUI :

Adresse IP : 192.168.33.200 /24

Passerelle : 192.168.33.2

New-NetIPAddress –InterfaceIndex 12 –IPAddress adresse_ip –PrefixLength masque_cidr –DefaultGateway adresse_ip_passerelle

Set-NetIPAddress –InterfaceIndex 12 –IPAddress adresse_ip –PrefixLength masque_cidr

Configuration Carte réseau

Fixons un DNS :

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 192.168.33.200

Redémarrer les deux machines :

shutdown -r -t 0

OU

Restart-Computer

Installation Active Directory :

Install AD

Confirmer l'installation

Promouvoir le serveur :

Pomote this server

Créer une nouvelle forêt :

new forest

Enter password

Suivre l’assistant et cliquer à la fin sur Install.

Votre serveur Active Directory va redémarrer. Un fois celui-ci démarré, intégrer votre Windows Core au domaine :

Add-Computer -DomainName mewpipe.com -Credential Administrator@mewpipe.com

Intégrer domaine

Redémarrer votre serveur :

shutdown -r -t 0

OU

Restart-Computer

Confirmation & redémarrage

Votre Windows Core est maintenant intégré dans le domaine mewpipe.com

Administration du Serveur Core :

Sur votre Windows GUI ajouter votre Windows Core.

add server

Rechercher votre serveur Core

select server

Vous pouvez maintenant Administrer votre Windows Core à partir de votre Windows GUI.

Exemple : installer IIS :

add roles

Sélectionner votre serveur Core :

select core server

Sélectionner le(s) rôle(s) à installer.

select role

deployer role

Attendre la fin de l’installation

wait

Vérifions que IIS est bien installé sur le Windows Core :

IIS OK

cf : Administrer IIS d’un Windows Server Core à partir d’un Windows en GUI

Mémo commandes PowerShell

Définir le clavier en AZERTY

Set-WinUserLanguageList -LanguageList fr-FR

Changer le nom de votre machine

Rename-Computer -NewName « nom »

Configurer une carte réseau
Lister les interfaces réseaux

Get-NetIPInterface

Affecter une adresse et un masque à une interface

Adresse : 172.16.0.50

Masque de sous-réseau : 255.255.255.0 (/24)

New-NetIPAddress –InterfaceIndex 12 –IPAddress 172.16.0.50 –PrefixLength 24

Passerelle : 172.16.0.1

New-NetIPAddress –InterfaceIndex 12 –IPAddress 172.16.0.50 –PrefixLength 24 –DefaultGateway 172.16.0.1

Ajouter une adresse DNS

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 172.16.0.1

Intégrer une machine dans un domaine Active Directory

Add-Computer -DomainName pjt.local -Credential Administrator@pjt.local

Redémarrer la machine

Restart-Computer

Administrer à distance IIS
Installer le WMSvc IIS

Import-Module ServerManager

Add-WindowsFeature Web-Mgmt-Service

Activez le WMSvc IIS

Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1

Démarrer automatiquement WMSvc

Set-Service -name WMSVC -StartupType Automatic

Start-service WMSVC

Sur un autre serveur, vous pouvez lancer une console IIS et ajouter le nouveau serveur.

Désactiver le firewall de Windows

Set-NetFirewallProfile -Profile * -Enabled False

Créer des Utilisateurs dans Active Directory avec PowerShell depuis une feuille Excel

1- Installer le pack Office sur la machine exécutant le script.

2- La fonction OU vérifie la présence de l’OU sur l’Active Directory, si elle n’est pas présente la fonction la crée.

3- Le script parcourt la liste des utilisateurs, exécute la fonction OU, créé l’utilisateur puis l’active.

Exemple de fichier .xlsx : Employees

IMPORT_user_excel.ps1 (Supprimer l’extension ppt)

function OU
{
param($myou)
$result = [adsi]::Exists("LDAP://OU=$myou,OU=Supinfo,DC=supexchange,DC=fr")

    if($result -ne 'True') {
        New-ADOrganizationalUnit -Name $myou -Path "ou=Supinfo,dc=supexchange,dc=fr"
        Write-Host "Création de l'OU $myou"
    }
    
    
}

$XLSDoc = "C:\Users\Administrator\Documents\Employees.xlsx"
$SheetName = "Firstname"
$Excel = New-Object -ComObject "Excel.Application"

$Workbook = $Excel.workbooks.open($XLSDoc)
$Sheet = $Workbook.Worksheets.Item(1)
$Excel.Visible = $true

$RowCount = $Sheet.UsedRange.Rows.Count
Write-Host "Il y a $RowCount utilisateurs"

for ($i=2; $i -le $RowCount; $i++){
$firstname = $Sheet.Cells.Item($i,2).Text
$lastname = $Sheet.Cells.Item($i,3).Text
$location = $Sheet.Cells.Item($i,4).Text
$department = $Sheet.Cells.Item($i,5).Text

OU($department)
$OU = "OU=$department,OU=Supinfo,DC=supexchange,DC=fr"
New-ADUser -Name "$firstname $lastname" –GivenName $firstname –Surname $lastname –DisplayName "$firstname $lastname" -City $location –SamAccountName "$firstname.$lastname".ToLower() -AccountPassword (convertto-securestring 'Supinfo2014' -asplaintext -force ) -Path $OU -UserPrincipalName "$firstname.$lastname@supexchange.fr".ToLower()
Enable-ADAccount -Identity "$firstname.$lastname".ToLower()

Write-host $firstname $lastname $location $department
}
$Excel.quit()