Archive

Archives pour 10/2011

Transfert vers un serveur FTP avec Powershell

Voici un script PowerShell qui permet de transférer un dossier vers un serveur FTP.
Ce script upload le dossier avec tous les sous dossiers et les fichiers.

?View Code POWERSHELL
#Compte ftp
$user = "guest"
#Mot de passe du compte ftp
$password = "Powershell"
#Dossier source
$localdir = "C:\Scripts\"
#Dossier destination
$ftpdir = "ftp://ftp.server.com/uploads/"
 
$client = New-Object System.Net.WebClient 
$client.Credentials = New-Object System.Net.NetworkCredential($user,$password) 
 
#Debut de la partie création du dossier distant a mettre en remarque si le dossier existe déjà.
$parentfolder = $localdir.split("\")[-1]
Write-Host "Création de $parentfolder"
$makedir = [System.Net.WebRequest]::Create($ftpdir+$parentfolder);
$makedir.Credentials = New-Object System.Net.NetworkCredential($user,$password) 
$makedir.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;
$makedir.GetResponse();
#Fin de la partie création du dossier distant
 
 
foreach($item in Get-ChildItem -recurse $localdir){ 
 
    $filename = [system.io.path]::GetFullPath($item.FullName).SubString([system.io.path]::GetFullPath($localdir).Length + 1)
 
    if ($item.Attributes -eq "Directory"){
 
        try{
            Write-Host "Création de $item.Name"
 
            $makedir = [System.Net.WebRequest]::Create($ftpdir+"/"+$parentfolder+"/"+$filename);
            $makedir.Credentials = New-Object System.Net.NetworkCredential($user,$password) 
            $makedir.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;
            $makedir.GetResponse();
 
            }
            catch [Net.WebException] {
            Write-Host $item.Name probably exists ...
            }
 
            continue;
        }
 
        Write-Host "Transfert de $item..."
        $file = New-Object System.Uri($ftpdir+"/"+$parentfolder+"/"+$filename) 
        $client.UploadFile($file, $item.FullName)
    }

.

Categories: Powershell Tags: , ,

Copier le résultat dans le press-papier

Pour copier le résultat d’une commande Powershell directement dans le presse-papier, il suffit de rajouter « | clip » à la fin de celle-ci.
Il de reste plus qu’à aller faire le coller ou vous le souhaitez.

?View Code POWERSHELL
Get-ChildItem | clip
Categories: Powershell Tags: ,

Retrouver la lettre d’un disque USB

Dans votre profile, vous souhaitez vous connecter automatiquement à votre disque USB.
Il peut arriver que la lettre change.
Pour retrouver systématiquement la lettre de votre disque, voici un méthode.

?View Code POWERSHELL
$drive = get-psdrive | where-object { $_.description -eq "Disk Label" }
Set-Location $drive.root
Categories: Powershell Tags: , ,

Ne garder que les derniers caractères d’une chaîne

Voici comment extraire les 8 derniers caractères d’une chaine.

?View Code POWERSHELL
$log = "sys000456.log"
$log.Substring($log.Length-8,8)
Categories: Powershell Tags: ,

Créer et modifier son profile Powershell

Chacun ces petites habitudes sous Powershell.
Voici comment créer son profile et charger la configuration que l’on souhaite à l’ouverture de Powershell.

Identifiez le chemin de votre profile.

?View Code POWERSHELL
$profile

Sous Windows Seven, le résultat devrait ressembler à ‘C:\Users\Christophe\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1’
Vérifiez la présence du profile.

?View Code POWERSHELL
Test-Path $profile

Si la réponse et « True », lancez:

?View Code POWERSHELL
notepad $profile

Si la réponse est « False », il faut au préalable créer le fichier.

?View Code POWERSHELL
New-Item -Path $profile -Type file -Force
notepad $profile

Une fois dans le fichier, vous pouvez ajouter toutes les commandes que vous souhaitez exécuter à l’ouverture de Powershell.

Exemple:

Relancez Powershell pour admirer le résultat.

Categories: Powershell Tags: ,

Une page « A propos »

Après quelques années de réflexion, je m’y suis mis. La page « A propos » est en ligne.

J’y parle du blog et pas trop de moi. Les réseaux sociaux s’en charge.

Bonne lecture

Categories: Divers Tags: , ,

Utiliser Internet Explorer avec Powershell

Pour scripter des taches sur des sites web avec Internet Explorer.
Voici quelques astuces.

Tout d’abord lancer une page.

?View Code POWERSHELL
$ie = New-Object -COMObject InternetExplorer.Application
$ie.visible = $true
$ie.Navigate('http://my-powershell.fr')
While ($ie.Busy) { Start-Sleep -Milliseconds 400 }

Afficher la liste des images

?View Code POWERSHELL
$ie.document.getElementsByTagName('img') | Select-Object -ExpandProperty src

Afficher la liste des liens

?View Code POWERSHELL
$ie.document.getElementsByTagName('a') | Select-Object -ExpandProperty href

Cliquer sur un lien.

?View Code POWERSHELL
$link = $ie.Document.getElementsByTagName('a') | where-object {$_.title -eq 'Linkedin'}
$link.click()

Si vous souhaitez télécharger un document, une image ou un tout autre type de fichier, il faut charger le module « BitsTransfer » qui vous donnera accès a toute une série de cmdlets.

?View Code POWERSHELL
Import-Module BitsTransfer
Get-Command -Module BitsTransfer
 
CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Add-BitsFile                                        Add-BitsFile [-BitsJob]  [-Source]  [-V...
Cmdlet          Get-BitsTransfer                                    Get-BitsTransfer [[-Name] ] [-AllUsers...
Cmdlet          Remove-BitsTransfer                                 Remove-BitsTransfer [-BitsJob]  [-Ver...
Cmdlet          Resume-BitsTransfer                                 Resume-BitsTransfer [-BitsJob]  [-Asy...
Cmdlet          Set-BitsTransfer                                    Set-BitsTransfer [-BitsJob]  [-Displa...
Cmdlet          Start-BitsTransfer                                  Start-BitsTransfer [-Source]  [[-Desti...
Cmdlet          Suspend-BitsTransfer                                Suspend-BitsTransfer [-BitsJob]  [-Ve...

Et donc pour télécharger un document.

?View Code POWERSHELL
Start-BitsTransfer -Source 'http://my-powershell.fr/plus.png' -Destination 'c:\images\'

Avec tous ces éléments il est possible de scripter le téléchargement quotidien d’un fichier sur un site web, le téléchargement rapide toutes les images d’une page ou toute autres idées tordues.
D’autres infos.

Categories: Powershell Tags:

Supprimer les photos en portrait

Je n’aime pas le photos prise en portrait. A chacun ces goûts.
Voici le moyen que j’ai trouver pour toutes les supprimer d’un coup.

?View Code POWERSHELL
$image = New-Object -ComObject Wia.ImageFile
Get-ChildItem -Recurse -Include *.jpg -Path "..\images" | foreach {
$file = $_.fullname
$image.LoadFile($file)
if ( $image.Width -gt $image.Height) {
Remove-Item -Path $file -Force
}
}
Categories: Powershell Tags: ,

Vérifier la présence d’un dossier avant de le créer

Une petite ligne rapide pour tester la présence d’un dossier et le créer si absent.

?View Code POWERSHELL
If (-not (Test-Path "dossier_test")) { New-Item -ItemType Directory -Name "dossier_test" }
Categories: Powershell Tags:

Renommer vos photos avec la date de prise de vue

Mon problème, j’utilise plusieurs appareils photos et mon smartphone pour immortaliser ma petite famille. De ce fait, je me retrouve avec des photos DSC… partout. Je souhaite les classer chronologiquement avec Powershell.
De nombreux programme sous Windows le font en se basant sur EXIF.
Mais quoi de mieux que le faire soit même en Powershell.
Grâces aux Métadonnées EXIF voici ce qu’il est possible de faire.

?View Code POWERSHELL
[reflection.assembly]::loadfile( "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll") > $null
if ((Test-Path -path "Result") -ne $True)
{
New-Item -Name "Result" -type directory
}
$Files = Get-ChildItem -filter *.jpg
foreach ($file in $Files) 
{
$foo=New-Object -TypeName system.drawing.bitmap -ArgumentList $File.fullname
$date = $foo.GetPropertyItem(36867).value[0..20]
$arYear = [Char]$date[0],[Char]$date[1],[Char]$date[2],[Char]$date[3]
$arMonth = [Char]$date[5],[Char]$date[6]
$arDay = [Char]$date[8],[Char]$date[9]
$strYear = [String]::Join("",$arYear)
$strMonth = [String]::Join("",$arMonth) 
$strDay = [String]::Join("",$arDay)
$DateTaken = $strYear + "-" + $strMonth + "-" + $strDay
$time = [Char]$date[11],[Char]$date[12],[Char]$date[14],[Char]$date[15],[Char]$date[17],[Char]$date[18]
$strtime = [String]::Join("",$time)
$taken = $DateTaken + "-" + $strtime + ".jpg"
$TargetPath = ".\result\" + $taken
Copy-Item -PassThru $File.fullname -Destination $TargetPath
}
Categories: Powershell Tags: , ,