Powershell

De Linuxmemo.

(Différences entre les versions)
(Filtres)
 
(73 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
[[Catégorie:Windows_sysadmin]]
[[Catégorie:Windows_sysadmin]]
 +
[[Catégorie:PowerShell]]
 +
==Avoir de l'aide==
 +
 +
*sur une commande
 +
Get-Help commande
 +
Get-Help commande -examples
 +
Get-Help commande -detailed
 +
Get-Help commande -full
 +
ou
 +
help commande
 +
 +
*liste des commandes
 +
Get-Command
 +
Get-Command -verb Get
 +
Get-Command -noun Service
 +
Get-Command -commandType alias
 +
Get-Command Get-*
 +
Get-Command *-Service
 +
Get-Verb
 +
 +
*lister tout les propriétés et méthodes d'un objet
 +
$maVariable | Get-Member
 +
$maVariable | Get-Member -MemberType Method
 +
$maVariable | Get-Member -MemberType Property
 +
$maVariable | Get-Member -MemberType Property CreateTime
 +
Get-ItemProperty
 +
appel méthode
 +
$maVariable.ToUpper()
 +
 +
*lister les Provider
 +
Get-PsProvider
 +
 +
*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
 +
 +
==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==
==Syntaxe==
Ligne 6 : Ligne 65 :
Affichage des propriétés sous forme de liste
Affichage des propriétés sous forme de liste
  Get-ChildItem | Format-List
  Get-ChildItem | Format-List
 +
  ou toutes les propriétés
  ou toutes les propriétés
  Get-ChildItem | Format-List *
  Get-ChildItem | Format-List *
-
  Get-ChildItem | Format-List -Property name, length
+
 +
ou juste les propriétés name et lenght
 +
  Get-ChildItem | '''Format-List -Property''' name, length
 +
  ou une seul propriété
  ou une seul propriété
  (Get-ChildItem nomfichier).CreationTime
  (Get-ChildItem nomfichier).CreationTime
Ligne 17 : Ligne 80 :
Affichage personnalisé des propriétés
Affichage personnalisé des propriétés
  Get-ChildItem | Format-Custom
  Get-ChildItem | Format-Custom
-
 
-
===Appel des méthodes===
 
-
 
-
$a = 12
 
-
$a.GetType()
 
-
Int32
 
===Filtres===
===Filtres===
-
*wc = Measure-Object
+
*wc = '''Measure-Object'''
  Get-Command | Measure-Object
  Get-Command | Measure-Object
-
*grep = Select-String
+
*grep = '''Select-String'''
 +
 
 +
*grep sur les méthodes et les propriétés =  '''Where-Object méthodes/propriétés -eq quelquechose'''
 +
Get-service |''' Where-Object status -eq Stopped'''
-
*Where-Object
+
*'''Select-Object''' (select)
-
  Get-service | Where-Object {$_.status -eq 'Stopped'}
+
  Get-WmiObject win32_userprofile | Select-Object LocalPath
===Guillemets===
===Guillemets===
Ligne 52 : Ligne 112 :
`r = retour chariot
`r = retour chariot
...
...
 +
 +
===Appel des méthodes===
 +
$a = 12
 +
$a.GetType()
 +
Int32
===Valeur de propriétés===
===Valeur de propriétés===
Ligne 60 : Ligne 125 :
  Taille du fichier config.sys : 10 octets
  Taille du fichier config.sys : 10 octets
-
==Avoir de l'aide==
+
===Opérateurs de comparaisons===
 +
Les opérateurs de comparaison pour le shell, par défaut, ne sont pas sensibles à la casse lors de la comparaison des chaînes :
 +
'''-eq    Equal (case insensitive)'''
 +
-ne    Not equal (case insensitive)
 +
-ge    Greater than or equal (case insensitive)
 +
-gt    Greater than (case insensitive)
 +
-lt    Less than (case insensitive)
 +
-le    Less than or equal (case insensitive)
 +
'''-like    Wildcard comparison (case insensitive)'''
 +
-notlike    Wildcard comparison (case insensitive)
 +
'''-match      Regular expression comparison (case insensitive)'''
 +
-notmatch        Regular expression comparison (case insensitive)
 +
-replace        Replace operator (case insensitive)
 +
-contains        Containment operator (case insensitive)
 +
-notcontains      Containment operator (case insensitive)
-
*sur un commande
+
-ieq      Case insensitive equal
-
  Get-Help commande
+
  -ine      Case insensitive not equal
-
  Get-Help commande -examples
+
  -ige      Case insensitive greater than or equal
-
  Get-Help commande -detailed
+
-igt      Case insensitive greater than
-
  Get-Help commande -full
+
  -ile        Case insensitive less than or equal
-
  ou
+
-ilt        Case insensitive less than
-
  help commande
+
  -ilike        Case insensitive equal
 +
-inotlike        Case insensitive equal
 +
  -imatch        Case insensitive regular expression comparison
 +
  -inotmatch        Case insensitive regular expression comparison
 +
-ireplace        Case insensitive replace operator
 +
-icontains        Case insensitive containment operator
 +
-inotcontains          Case insensitive containment operator
-
*liste des commandes
+
-ceq      Equal (case sensitive)
-
  Get-Command
+
-cne        Not equal (case sensitive)
 +
-cge        Greater than or equal (case sensitive)
 +
-cgt        Greater than (case sensitive)
 +
-clt        Less than (case sensitive)
 +
-cle        Less than or equal (case sensitive)
 +
-clike          Wildcard comparison (case sensitive)
 +
-cnotlike        Wildcard comparison (case sensitive)
 +
-cmatch          Regular expression comparison (case sensitive)
 +
-cnotmatch          Regular expression comparison (case sensitive)
 +
-creplace            Replace operator (case sensitive)
 +
-ccontains            Containment operator (case sensitive)
 +
  -cnotcontains            Containment operator (case sensitive)
-
*lister tout les propriétés et méthodes d'un objet
+
-is          Is of a type
-
  $maVariable | Get-Member
+
-isnot        Is not of a type
-
  appel méthode
+
-as        As a type, no error if conversion fails
-
  $maVariable.ToUpper()
+
 
 +
==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
 +
 
 +
*fichier profile pour commande automatique au lancement du shell
 +
  notepad $profile
 +
Import-Module nommodule
 +
  start-transcript
 +
  ...
==Vocabulaire==
==Vocabulaire==
Ligne 95 : Ligne 210 :
==Les modules==
==Les modules==
-
Click Start, point to Administrative Tools, and then click Module Active Directory pour Windows PowerShell .
+
Microsoft Script Center: http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx ou http://gallery.technet.microsoft.com/ScriptCenter/
-
Les modules sont des fichier .psd1 ou .psm1
+
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 ê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.
+
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  
*liste les modules chargés  
Ligne 134 : Ligne 258 :
*PowerShell Doit être installé sur la machine local et sur la machine distante.
*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.
*Les 2 machines doivent être configurés pour une gestion a distance.
-
Démarrez le service Windows Remote Management (WinRM). "net start winrm"
+
Enable-PSRemoting
 +
ou
 +
[[Winrm]]
-
  Enter-PSSession -computer Server01 -port 90 -credential domain01\user01
+
  Enter-PSSession -computer '''NOMMACHINE''' -port '''5985''' -credential domain01\user01
-
Alias: etsn
+
Alias: etsn
 +
* déactivation du shell a distance
 +
Disable-PSRemoting
-
==Outils intégrés==
+
==commandes utiles==
 +
Get-Process, Start-Process, Stop-Process, Wait-Process, Debug-Process
 +
Get-Service
 +
Get-EventLog
 +
Restart-Computer
 +
Test-Connection
 +
Clear-EventLog
 +
Get-EventLog
 +
Get-Hotfix
 +
Get-Process
 +
Get-Service
 +
Set-Service
 +
Get-WinEvent
 +
Get-WmiObject, Get-WmiObject -List, Get-WmiObject -List | Where-Object { $_.name -match 'disk'}, '''Get-WmiObject win32_computersystem'''
 +
 
 +
==les Objets (Outils intégrés)==
*cmdlets (mini-exe réalisant des fonctions préséfinies
*cmdlets (mini-exe réalisant des fonctions préséfinies
-
Out-GridView,
+
Out-GridView,
*utilitaires:
*utilitaires:
-
fsutil,
+
fsutil,etc...
-
*Tout les objet .net
+
*Tout les objet .NET http://technet.microsoft.com/fr-fr/library/dd347574.aspx
 +
New-Object -TypeName System.Diagnostics.EventLog
 +
New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
 +
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
 +
$AppLog | Get-Member -MemberType Method
 +
$AppLog.Clear()
 +
$AppLog
 +
Méthodes statiques:
 +
[espace de nom. <type .net>]::<Membre-statique>
 +
[System.DateTime]::Now
 +
http://msdn.microsoft.com/fr-fr/library/gg145045.aspx
 +
*Tout les objets COM
 +
Vous devez spécifier le paramètre ComObject avec l'identificateur programmatique (ou ProgId) de la classe COM à utiliser.</b>
 +
Vous pouvez créer les objets WSH en spécifiant ces ProgId : WScript.Shell, WScript.Network, Scripting.Dictionary et Scripting.FileSystemObject. Les commandes suivantes créent ces objets :
 +
New-Object -ComObject WScript.Shell
 +
New-Object -ComObject WScript.Network
 +
New-Object -ComObject Scripting.Dictionary
 +
New-Object -ComObject Scripting.FileSystemObject
 +
gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName
 +
Lister tout les ProgId
 +
dir  REGISTRY::HKEY_CLASSES_ROOT\CLSID -include PROGID -recurse | foreach {$_.GetValue("")}
 +
ou
 +
get-wmiobject Win32_COMClass
 +
$WshShell = New-Object -ComObject WScript.Shell
 +
$WshShell | Get-Member
 +
$lnk = $WshShell.CreateShortcut("$Home\Desktop\PSHome.lnk")
*Tout les objet fs
*Tout les objet fs
-
 
+
Get-ChildItem c:\
*Tout les objet AD
*Tout les objet AD
-
Get-ADObject   
+
Get-ADObject   
-
 
+
Télécharger RSAT "Remote Server Admin Tools" nouveau AdminPack pour win2008srv.<br />
-
Télécharger RSAT "Remote Server Admin Tools" nouveau AdminPack pour win2008srv. http://www.microsoft.com/fr-fr/download/details.aspx?id=7887
+
http://www.microsoft.com/fr-fr/download/details.aspx?id=7887
*Tout les objet WMI
*Tout les objet WMI
-
Get-WMIObject Win32_NetworkAdapterConfiguration
+
Get-WMIObject Win32_NetworkAdapterConfiguration
 +
http://msdn.microsoft.com/fr-fr/library/windows/desktop/aa394572%28v=vs.85%29.aspx
*Tout les objet du registre
*Tout les objet du registre
-
Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix''
+
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==
==Astuces==
F7 -- Pour avoir l'historique des commandes
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
 +
$obj = New-Object -com Wscript.Network
 +
$obj.MapNetworkDrive("x:", "\\serveur\partage")
 +
 +
*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é
 +
 +
*Effacer un profile utilisateur
 +
( Get-WmiObject -Class Win32_UserProfile | Where-Object { $_.LocalPath -eq 'c:\users\user' } ).Delete()
==Ressources==
==Ressources==
http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx
http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx

Version actuelle en date du 20 février 2017 à 09:41

Sommaire

[modifier] Avoir de l'aide

  • sur une commande
Get-Help commande
Get-Help commande -examples
Get-Help commande -detailed
Get-Help commande -full
ou 
help commande
  • liste des commandes
Get-Command
Get-Command -verb Get
Get-Command -noun Service
Get-Command -commandType alias
Get-Command Get-*
Get-Command *-Service
Get-Verb

  • lister tout les propriétés et méthodes d'un objet
$maVariable | Get-Member
$maVariable | Get-Member -MemberType Method
$maVariable | Get-Member -MemberType Property
$maVariable | Get-Member -MemberType Property CreateTime
Get-ItemProperty
appel méthode
$maVariable.ToUpper()
  • lister les Provider
Get-PsProvider
  • 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

[modifier] 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

[modifier] Dénomination verbe-substantif

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

[modifier] Syntaxe

[modifier] 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 *

ou juste les propriétés name et lenght
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

[modifier] Filtres

  • wc = Measure-Object
Get-Command | Measure-Object
  • grep = Select-String
  • grep sur les méthodes et les propriétés = Where-Object méthodes/propriétés -eq quelquechose
Get-service | Where-Object status -eq Stopped
  • Select-Object (select)
Get-WmiObject win32_userprofile | Select-Object LocalPath

[modifier] Guillemets

double ""

substitution de variable

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

protection de chaine

[modifier] Caractère d'échappement

AltGr + 7 donne le backtick "`"

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

[modifier] Appel des méthodes

$a = 12
$a.GetType()
Int32

[modifier] 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

[modifier] Opérateurs de comparaisons

Les opérateurs de comparaison pour le shell, par défaut, ne sont pas sensibles à la casse lors de la comparaison des chaînes :

-eq    Equal (case insensitive)
-ne    Not equal (case insensitive)
-ge    Greater than or equal (case insensitive)
-gt    Greater than (case insensitive)
-lt     Less than (case insensitive)
-le    Less than or equal (case insensitive)
-like     Wildcard comparison (case insensitive)
-notlike     Wildcard comparison (case insensitive)
-match       Regular expression comparison (case insensitive)
-notmatch        Regular expression comparison (case insensitive)
-replace        Replace operator (case insensitive)
-contains        Containment operator (case insensitive)
-notcontains       Containment operator (case insensitive)
-ieq      Case insensitive equal
-ine       Case insensitive not equal
-ige       Case insensitive greater than or equal
-igt       Case insensitive greater than
-ile        Case insensitive less than or equal
-ilt         Case insensitive less than
-ilike         Case insensitive equal
-inotlike        Case insensitive equal
-imatch        Case insensitive regular expression comparison
-inotmatch        Case insensitive regular expression comparison
-ireplace        Case insensitive replace operator
-icontains         Case insensitive containment operator
-inotcontains           Case insensitive containment operator
-ceq       Equal (case sensitive)
-cne        Not equal (case sensitive)
-cge         Greater than or equal (case sensitive)
-cgt         Greater than (case sensitive)
-clt         Less than (case sensitive)
-cle         Less than or equal (case sensitive)
-clike          Wildcard comparison (case sensitive)
-cnotlike         Wildcard comparison (case sensitive)
-cmatch          Regular expression comparison (case sensitive)
-cnotmatch           Regular expression comparison (case sensitive)
-creplace            Replace operator (case sensitive)
-ccontains            Containment operator (case sensitive)
-cnotcontains            Containment operator (case sensitive)
-is           Is of a type
-isnot        Is not of a type
-as        As a type, no error if conversion fails

[modifier] 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

  • fichier profile pour commande automatique au lancement du shell
notepad $profile
Import-Module nommodule
start-transcript
...

[modifier] 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:

[modifier] Les modules

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

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 -

[modifier] 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.

[modifier] 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
ou
Winrm
Enter-PSSession -computer NOMMACHINE -port 5985 -credential domain01\user01
Alias: etsn
  • déactivation du shell a distance
Disable-PSRemoting

[modifier] commandes utiles

Get-Process, Start-Process, Stop-Process, Wait-Process, Debug-Process
Get-Service
Get-EventLog
Restart-Computer
Test-Connection
Clear-EventLog
Get-EventLog
Get-Hotfix
Get-Process
Get-Service
Set-Service
Get-WinEvent
Get-WmiObject, Get-WmiObject -List, Get-WmiObject -List | Where-Object { $_.name -match 'disk'}, Get-WmiObject win32_computersystem

[modifier] les Objets (Outils intégrés)

  • cmdlets (mini-exe réalisant des fonctions préséfinies
Out-GridView,
  • utilitaires:
fsutil,etc...
New-Object -TypeName System.Diagnostics.EventLog
New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog | Get-Member -MemberType Method
$AppLog.Clear()
$AppLog

Méthodes statiques:

[espace de nom. <type .net>]::<Membre-statique>
[System.DateTime]::Now

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

  • Tout les objets COM

Vous devez spécifier le paramètre ComObject avec l'identificateur programmatique (ou ProgId) de la classe COM à utiliser.</b> Vous pouvez créer les objets WSH en spécifiant ces ProgId : WScript.Shell, WScript.Network, Scripting.Dictionary et Scripting.FileSystemObject. Les commandes suivantes créent ces objets :

New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName

Lister tout les ProgId

dir  REGISTRY::HKEY_CLASSES_ROOT\CLSID -include PROGID -recurse | foreach {$_.GetValue("")}
ou
get-wmiobject Win32_COMClass
$WshShell = New-Object -ComObject WScript.Shell
$WshShell | Get-Member
$lnk = $WshShell.CreateShortcut("$Home\Desktop\PSHome.lnk")
  • 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

[modifier] Astuces

F7 -- Pour avoir l'historique des commandes

[modifier] 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
$obj = New-Object -com Wscript.Network 
$obj.MapNetworkDrive("x:", "\\serveur\partage")
  • 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é
  • Effacer un profile utilisateur
( Get-WmiObject -Class Win32_UserProfile | Where-Object { $_.LocalPath -eq 'c:\users\user' } ).Delete()

[modifier] Ressources

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

Outils personnels