Activer l’éditeur PowerShell sur Windows 2008 R2



Par défaut, l’éditeur PowerShell ISE sur Windows 2008 R2 ou Seven qui possèdent nativement PowerShell V2 n’est pas accessible.
Il faut l’installer. Rien à télécharger, tout est déja disponible en local. Il suffit juste de lancer la commande.

Import-Module ServerManager;Add-WindowsFeature PowerShell-ISE

Et comme par magie Powershell ISE apparait dans le menu démarrer.
 

 

Il vous permettra de faire en local vos petites modifications de script.
 

 
Pour les autres versions de Windows il faudra passer par l’installation de PowerShell V2.



Exporter le taux d’occupation des disques des VM



Pour prévenir des problèmes de saturation des disques des machines virtuelles dans un environnement important, je voulais un script qui m’exporte dans un fichier le taux d’occupation des volumes de chacune de VMs sous Windows ou Linux.

Ce script PowerCli consulte toutes les VMs l’architecture et fait un état de chaque disque. Il calcul l’espace en GB et le pourcentage de disque libre.

$date = (Get-Date).ToString("ddMMyyyyhhmmss")
$file = ".\Export_vS\" + $date + "-VMDisksState.csv"
$resfile = New-Item -ItemType file -Path $file -Force
Add-Content -Path $resfile -Value "Name;Volume;GB Libre;% Libre"
Get-VM  | foreach { 
 
$disks = $_.guest.disks
 
Foreach ($disk in $disks) {
$FreeSpace = [math]::round([int64]$disk.FreeSpace/1GB,2)
$Pourcent =  [math]::round(([int64]$disk.FreeSpace*100)/$disk.Capacity)
Add-Content -Path $resfile -Value "$($_.name);$($disk.path);$($FreeSpace);$($pourcent)"
 
}
}



Se connecter au vCenter Server avec PowerCli



La première ligne de commande après avoir lancer PowerCli, elle vous permet de vous connecter au vCenter Server et c’est ensuite que vous pourrez agir.

Connect-VIServer -Server 127.0.0.1 -User "domain\vcmadmin" -Password "P@ssW0rd" -Protocol "https"



Récupérer la date sur un système distant



En deux lignes, voici comment contrôler l’heure et la date sur un serveur distant avec PowerShell.

$rtime = Get-WmiObject -Class Win32_OperatingSystem -ComputerName "ServerName"
Write-Host $rtime.ConvertToDateTime($rtime.LocalDateTime)



Lister les 10 plus grosses boites aux lettres



Voici une commande pour récupérer le top 10 des boites Exchange de votre organistation.

Get-Mailbox -ResultSize unlimited | Get-MailboxStatistics | Sort-Object -Descending -Property TotalItemSize | Select-Object DisplayName,TotalItemSize -First 10



Variables d’environnement avec PowerShell



Voici comment utiliser les variables d’environnement avec PowerShell.

Afficher les variables d’environnement:

Get-ChildItem Env:

Afficher une variable d’environnement:

$Env:os

Utiliser les variables d’environnement:

Set-Location $env:USERPROFILE



Gérer VMware vSphere avec Powershell



Voici un guide de référence PowerCli pour VMware vSphere 4.1.
Il vous donne les bases pour gérer vShere avec Powershell.

PowerCli-Quick_Reference



CmdLets PowerShell pour Active Directory



Le poster des commandes Powershell pour Active Directory.
Ces CmdLets Active Directory sont disponibles sur Windows Server 2008 R2 mais nécessite Active Directory Management Gateway Service pour les autres versions.

Poster PowerShell Active Directory



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.

$user = "guest"
$password = "Powershell"
$localdir = "C:\Scripts"
$ftpdir = "ftp://ftp.server.com/uploads/"
 
$client = New-Object System.Net.WebClient 
$client.Credentials = New-Object System.Net.NetworkCredential($user,$password) 
 
$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();
 
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)
    }

.



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.

Get-ChildItem | clip