Powershell

De Linuxmemo.

(Différences entre les versions)
(Les modules)
(Les modules)
Ligne 137 : Ligne 137 :
==Les modules==
==Les modules==
 +
Microsoft Script Center: http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx
 +
Les modules sont soit des fichier .psd1 ou .psm1, soit des binaires (.dll), soit des modules dynamique en ram.
Les modules sont soit des fichier .psd1 ou .psm1, soit des binaires (.dll), soit des modules dynamique en ram.

Version du 24 juin 2013 à 13:35

Sommaire

Script (exécution, mode de sécurité)

  • fichier ayant pour extension .PS1
  • exécution

depuis une invite de commande

 powershell c:\monscript.ps1

double clic, il faut modifier les paramètres de sécurité implémentés dans PowerShell car par défaut il est impossible de lancer un script sans passer par l’interpréteur PowerShell.

Get-ExecutionPolicy

PowerShell propose 4 modes de sécurité différents:

Restricted - No scripts can be run. Windows PowerShell can be used only in interactive mode.
AllSigned - Only scripts signed by a trusted publisher can be run.
RemoteSigned - Downloaded scripts must be signed by a trusted publisher before they can be run.
Unrestricted - No restrictions; all Windows PowerShell scripts can be run.

changer de mode et d’autoriser l’exécution de script locaux

Set-ExecutionPolicy RemoteSigned

Dénomination verbe-substantif

http://msdn.microsoft.com/en-us/library/windows/desktop/ms714428%28v=vs.85%29.aspx

Syntaxe

Formatage d'affichage des propriétés

Affichage des propriétés sous forme de liste

Get-ChildItem | Format-List
ou toutes les propriétés
Get-ChildItem | Format-List *
Get-ChildItem | Format-List -Property name, length
ou une seul propriété
(Get-ChildItem nomfichier).CreationTime

Affichage des propriétés sous forme de Table

Get-ChildItem | Format-Table -autosize

Affichage de la seul propriété par défaut au format large table

Get-ChildItem | Format-Wide

Affichage personnalisé des propriétés

Get-ChildItem | Format-Custom

Appel des méthodes

$a = 12
$a.GetType()
Int32

Filtres

  • wc = Measure-Object
Get-Command | Measure-Object
  • grep = Select-String
  • Where-Object
Get-service | Where-Object {$_.status -eq 'Stopped'}

Guillemets

double ""

substitution de variable

$a = 'bonjour'
$b = 'monde'
Write-Host "$a $b"
bonjour monde
simple

protection de chaine

Caractère d'échappement

AltGr + 7 donne le backtick "`"

`n = Saut de ligne `r = retour chariot ...

Valeur de propriétés

$(objet.propriété)

$a = Get-ChilItem c:\config.sys
Write-Host "Taille du fichier $($a.Name) : $($a.Length) octets"
Taille du fichier config.sys : 10 octets

Avoir de l'aide

  • sur un commande
Get-Help commande
Get-Help commande -examples
Get-Help commande -detailed
Get-Help commande -full
ou 
help commande
  • liste des commandes
Get-Command
  • lister tout les propriétés et méthodes d'un objet
$maVariable | Get-Member
Get-ItemProperty
appel méthode
$maVariable.ToUpper()
  • Listage des classes WMI
Get-WmiObject –List 
$i=0;Get-WmiObject -list | foreach{$i=$i+1} ; Write-Host "Il y a $i membre(s)"
  • Connaitre sa version de PowerShell
$host.version
$PSVersionTable

Les profiles

  • Type Utilisateurs

%UserProfile%\My Documents\WindowsPowerShell\profile.ps1

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

  • Type Machine (pour tout les utilisateurs)

%windir%\system32\WindowsPowerShell\v1.0\profile.ps1

%windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1

Vocabulaire

"item"

fichier, répertoire, clé de la base de registre.

"fournisseur ou Provider po PsProvider"

Ce sont les objets sur lesquels la commande agis: Alias, Env, C, D, E,...,Z , Function, HKLM, KHCU, Variable, Cert.
Exemple:

Get-ChildItem C:
Get-ChildItem Alias:
Get-ChildItem Env:
Get-ChildItem Function:
Get-ChildItem HKLM:
Get-ChildItem Variable:

Les modules

Microsoft Script Center: http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx

Les modules sont soit des fichier .psd1 ou .psm1, soit des binaires (.dll), soit des modules dynamique en ram.

Si vous êtes seul à executer les commandes, il est préferable de positionner les modules dans votre profile Powershell;

soit
%USERPROFILE%\Documents\WindowsPowerShell\Modules\MonModule
ou
%DocumentsUser%\WindowsPowerShell\Modules\MonModule

Si vous executez des commandes depuis des taches planifiées ou si les commandes peuvent être executé par tout le monde , il est préferable d’installer dans le répertoire

%SystemRoot%,
soit
%WINDIR%\System32\WindowsPowerShell\v1.0\Modules\MonModule

Il est important que le nom du répertoire « MonModule » soit identique aux noms des fichiers avec l extension *.PSD1 & *.PSM1.

  • liste les modules chargés
Get-Module
ou
Get-PSSnapin
  • liste les modules diponible mais non encore chargés
Get-Module –ListAvailable
  • Charger un module
Import-module module
  • Decharger un module
Remove-Module module

ServerManager -

Restrictions

  • connaitre son niveau d'execution
get-executionpolicy
Restricted

Pour executer des scripts signés et non signés en local, il suffit de valider la commande

Set-ExecutionPolicy RemoteSigned
ou
Set-ExecutionPolicy –ExecutionPolicy RemoteSigned –Scope Process

dans powershell attention lancer powershell en tant qu'admin pour ce faire.

Un shell a distance

  • PowerShell Doit être installé sur la machine local et sur la machine distante.
  • Les 2 machines doivent être configurés pour une gestion a distance.
Enable-PSRemoting
Enter-PSSession -computer Server01 -port 90 -credential domain01\user01
Alias: etsn
  • déactivation du shell a distance
Disable-PSRemoting

les Objets (Outils intégrés)

  • cmdlets (mini-exe réalisant des fonctions préséfinies
Out-GridView,
  • utilitaires:
fsutil,etc...
  • Tout les objet .net
[espace de nom. <type .net>]::<Membre-statique>
[System.DateTime]::Now

http://msdn.microsoft.com/fr-fr/library/gg145045.aspx

  • Tout les objet fs
Get-ChildItem c:\
  • Tout les objet AD
Get-ADObject  

Télécharger RSAT "Remote Server Admin Tools" nouveau AdminPack pour win2008srv.
http://www.microsoft.com/fr-fr/download/details.aspx?id=7887

  • Tout les objet WMI
Get-WMIObject Win32_NetworkAdapterConfiguration

http://msdn.microsoft.com/fr-fr/library/windows/desktop/aa394572%28v=vs.85%29.aspx

  • Tout les objet du registre
Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix
  • Getting Credentials From The Command Line
PS> $key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds"
PS> Set-ItemProperty $key ConsolePrompting True
PS> Get-Credential

Astuces

F7 -- Pour avoir l'historique des commandes

Recettes

  • Registre
PS >Set-Location HKCU:\Software\Microsoft\Windows\CurrentVersion\Run
PS >Get-ItemProperty .

To set:

PS >(Get-ItemProperty .).MyProgram
c:\temp\MyProgram.exe
PS >Set-ItemProperty . MyProgram d:\Lee\tools\MyProgram.exe
PS >(Get-ItemProperty .).MyProgram
d:\Lee\tools\MyProgram.exe

To remove:

PS >Remove-ItemProperty . MyProgram
PS >(Get-ItemProperty .).MyProgram

To creating new:

PS >New-ItemProperty . -Name MyProgram -Value c:\temp\MyProgram.exe

To copying:

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:

ACL

PS >Get-Acl HKLM:\Software
  • Lecteurs
  • Services
Get-Service
Get-Service OC*
Get-Service | Where-Object {$_.status -eq "running"}
Restart-Service "nom service"
Set-Service "nom service" -StartupType Automatic
Stop-Service "nom service"
Start-Service "nom service"
  • Sécurité

Ressources

http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx

Outils personnels