mardi 18 décembre 2012

Powershell - Form





[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

$form = new-object Windows.Forms.form   
$form.Size = new-object System.Drawing.Size @(480,400)   
$form.text = "essai graphique 12/04/2007"

$boutton = new-object System.Windows.Forms.Button
$boutton.Text = 'Valider'
$boutton.Location = new-object System.Drawing.Size(300,155)  
$boutton.size = new-object System.Drawing.Size(120,30)
$boutton.add_Click({$nom=$listbox.get_selecteditem();$label2.text = "Reponse : " + $nom})

$label = New-Object System.Windows.Forms.Label
$label.text = "Qui est le meilleur en powershell ?"
$label.set_ForeColor("Green")
$label.Location = new-object System.Drawing.Size(55,30)  

$label.size = new-object System.Drawing.Size(200,20)
$label2 = New-Object System.Windows.Forms.Label
$label2.Location = new-object System.Drawing.Size(310,220)  
$label2.size = new-object System.Drawing.Size(180,20)

$listbox = new-object System.Windows.Forms.ListBox
[void]$listbox.Items.Add("Arnaud")
[void]$listbox.Items.Add("Robin")
[void]$listbox.Items.Add("Un autre")
[void]$listbox.Items.Add("Un autre2")
[void]$listbox.Items.Add("Un autre2")
[void]$listbox.Items.Add("Un autre2")
$listbox.Location = new-object System.Drawing.Size(50,75)  
$listbox.size = new-object System.Drawing.Size(200,200)

$form.Controls.Add($boutton)
$form.Controls.Add($listbox)
$form.Controls.Add($label)
$form.Controls.Add($label2)

$Form.Add_Shown({$form.Activate()})
[void]$form.showdialog()


Powershell - astuces



Voici quelques astuces en vrac pour Powershell :

Ajouter du texte dans un fichier TXT
ADD-content -path C:\temp\test.txt -value "Bonjour"

Lister tout les alias
get-alias

trouver une commande d'un alias
get-alias gal

trouver un alias d'une commande
get-alias -definition format-table

Trouver le DistinguishedName
Avec import-module activedirectory
$dn=(Get-ADUser "e-ricmx012").DistinguishedName

Afficher les partages
Get-WmiObject Win32_Share

Passage d'arguments
echo $args[0]

PopUp
$message = "BonJOUR"
$shell = new-object -com wscript.shell
$shell.popup("$message toi")

Prompt
$UserName = Read-Host "Please enter user name"
Get-Aduser $Username

Demarrer service sur machine distante
Invoke-Command {Start-Service "NSClientpp" -passthru} -ComputerName "srv-windows"

importer le module active directory
import-module activedirectory



#pointer sur l' ad
cd ad:

Version Powershell
$Host.Version
ou
$PSVersionTable
ou
$PSVersionTable.psversion
ou + précis
$PSVersionTable.psversion.Major


powershell - pause



La pause n'existant pas sous powershell, voici un équivalent pour Powershell

$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Powershell - Garantie Dell



#ajout des informations du fichier "serial.txt"
Import-CSV "./serial.txt" | % {

#URL de la garantie DELL avec le serial du fichier serial.txt
$url = "http://www.dell.com/support/troubleshooting/us/en/04/Servicetag/"+$_.serial

#téléchargement de l'URL
$content = (new-object System.Net.WebClient).DownloadString($url)

#extract de l'information necessaire
$content -match 'with an end date of (?.*).'
$datefin = $matches['coontent']

#affichage des informations
#$datefin
#$_.serial

#ajout des informations dans un fichier txt
ADD-content -path "_serial_et_date_fin_garantie.txt" -value "$_.serial    $datefin"
}


Utilité du script:
Crée un tableau avec le numero de serie d'un machine Dell ainsi que sa date de fin de garantie

Besoin :
--------
1°) Connexion Internet
2°) Le script PowerShell necessite un fichier serial.txt avec inscrit sur la premiere ligne "serial" puis 1 serial Dell par ligne.

Utilisation :
-------------
En lancant le script "fin_garantie_dell.ps1", par un clic droit "executer avec powershell"



Résultat :
----------
On obtient un fichier "_serial_et_date_fin_garantie.txt" dans le même répertoire avec en 1ere colonne le serial, et en 2nd colonne, la date de fin de garantie au format US.

Batch pour lancer Powershell avec droits


Si vous cherchez comme moi la possibilité de lancer un batch (.bat) afin d'executer un script Powershell (.ps1) tout en sachant et en gardant que la configuration powershell de base empêche l'execution des scripts, voici la solution pour l'execution d'un unique script.







::autoriser l execution des scripts

powershell -executionpolicy bypass -noexit -file ".\add_domain.ps1"

pause


Ceci peut se traduire de la manière suivante:
execute PowerShell avec la polique d'execution Bypass( Ok pour cette fois)  noexit(ne pas sortir de la commande) -file (lance le fichier suivant add_domain.ps1