Cours PowerShell 3 : premiers pas

source: www.dsfc.net/wp-content/uploads/supports/support-powershell-3-0.pdf

Premiers pas avec PowerShell 3

applets de commande ou cmdlets => jeu de commandes qui peut être enrichi par l'installation de logiciels (comme Microsoft Exchange 2007).
A partie du dos, tapper powershell ou via menu Démarrer, rechercher powershell

types d'objets

source: http://powershell-scripting.com/index.php?option=com_content&task=view&i...

Les objets WMI (Windows Management Instrumentation) concernent la gestion des systèmes. Ex pour voir L1 et L2: Get-WmiObject -Class Win32_CacheMemory -Namespace root/cimv2 -ComputerName . | Format-Table -Property name,purpose, installedsize

Les objets COM pour Component Object Model étendent l’utilisation de PowerShell à toutes les applications de votre système disposant d’API (Application Programming Interface) COM. Explication : les objets COM qui sont « publiques », distribués généralement avec vos applications (Microsoft Office, par exemple) vont vous permettre d’agir sur ces applications en question.

Microsoft a introduit des sécurités pour qu’un script non autorisé ne puisse pas s’exécuter à l’insu de l’utilisateur.

Protection et sécurité

Voir niveau de sécurité Get-ExecutionPolicy -List
    Mon pc retourne les scopes  (MachinePolicy, UserPolicy, Process, CurrentUser et LocalMachine) tous à Undefined.

Changer le niveau de sécurité avec Set-ExecutionPolicy
Le paramètre scope permet de limiter le niveau de sécurité à l’utilisateur courant, à la machine, etc.
    AllSigned Seul les scripts "signés" fonctionnent
    RemoteSigned Les scripts locaux fonctionne, ceux d'internet doivent être "signés"
    Restricted Aucun script externe autorisé
    Unrestricted Aucune limite pour l'exécution des scripts
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy unrestricted
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy remotesigned

Signature

Get-AuthenticodeSignature "C:\windows\notepad.exe"  ex non signé
Get-AuthenticodeSignature "C:\Program Files\Skype\Phone\skype.exe"  ex signé

Voir aussi

Get-Help about_Execution_Policies erreur, Update-Help permet de dl l'aide (si lancé en admin)
Get-Help about_Profiles  
Get-ExecutionPolicy pour déterminer votre stratégie d’exécution (en général à Restricted)
Set-ExecutionPolicy  
Set-AuthenticodeSignature  
Get-Alias liste les alias (par ex ls comme linux)

Sur la sécurité et stratégies (manquant dans le pdf), voir http://powershell-scripting.com/index.php?option=com_content&task=view&i...

Les 4 stratégies d’exécution dans PowerShell
Restricted - Stratégie par défaut
- Ne permet que la saisie interactive de commandes, c'est-à-dire uniquement dans le shell
- Les scripts ne sont pas autorisés
AllSigned - Les scripts peuvent être exécutés mais seulement s’ils sont signés
- Demande confirmation avant l’exécution de chaque script
RemoteSigned - Les scripts exécutés localement peuvent être exécutés sans être signés
- Les scripts téléchargés à partir d’internet doivent être signés
- Ne demande pas de confirmation avant d’exécuter des scripts signés ou non par une autorité de certification connue de votre ordinateur
Unrestricted - Tous les scripts signés ou non peuvent être exécutés

Pour débuter: Set-ExecutionPolicy RemoteSigned
Donc désormais vous pouvez écrire vos scripts dans un éditeur de texte et faire appel à eux soit depuis l’interpréteur de commandes PowerShell, soit en double-cliquant sur le fichier correspondant au script (par exemple monscript.ps1).

Voir bib scripts à http://powershell-scripting.com/index.php?option=com_content&task=sectio...

la console

Source: http://windowsforensique.com/index.php/admin-powershell/fondamentaux/fon...

Utiliser TAB (path et méthodes, variables et objets) et flèches curseur. F7 :  Affiche une boîte contenant l’historique des commandes. F9 : rappeler une commande de l’historique à partir de son numéro

[Ctrl]C : Met fin à l ’exécution de l’instruction courante.  [Ctrl][Pause] : Met fin à l ’exécution de la conole.

commandes (syntaxe et les 4 types)

[nom de commande] –[param] –[param] [arg1], [arg2]
​Un paramètre est une variable acceptée par une commande, un script ou un fonction. Un argument est une valeur affecté à une fonction.

Il y a 4 types de commandes: Applets de commandes (ou cmdlets) ; Fonctions shell ; Scripts ; Commandes natives
cmdlets
  • Implémentées à partir des classes .NET compilées dans un DLL (chargé par powershell au moment du démarrage)
  • Pas figées on peut utiliser le SDK pour écrire d’autres cmdlets
VERBE-NOM avec Verbe= Opération à effectuer et Nom = Objet concerné
Exp : Get-Command
Fonctions shell
  • Affecter un nom à une liste de commande (équivalent à des sous-routines et procédures).
  • S’exécute dans l’instance courante du shell.
  • Ces fonctions n’existent que pour la durée de la session powershell (porté locale)

Ex :  Ps c:\> function fonction-dir{ get-childitem |ft name,mode}
Ps c:\> fonction-dir

Scripts
  • Les scripts Powershell sont en  .ps1
  • Sont stockés sur disque et peuvent être invoqués à tout moment.
  • Peuvent être exécuter dans une session Powershell
  • Saisir son nom sans l’extension (le shell exécute le premier fichier .ps1 qui correspond au nom indiqué et qui se trouve dans le chemin mentionné dans la variable Powershell : $env:path).

Si le fichier n’est pas dans ce chemin : 
& ‘c:\mes scripts\monscript.ps1' arg1 arg2

Exécution dans une invite de commande Windows :
 C:\powershell –command c:\Scripts\monscript.ps1

Commandes natives
  • Programme externe que l’OS peut exécuter, cela lance un nouveau processus.
  • Il peut ou pas attendre que le processus se termine.

Ps: c> notepad.exe
Ps: c> ping machine | findstr « TTL »

Invoquer Powershell depuis d’autres shells : Powershell -?
C:\>powershell –command « get-service | where-object { $_.status -eq ‘Running’} | sort displayName »

cmdlets

connaître les paramètres acceptés par une applet de commande : Nom_cmdlet -?

Get-command permet de déterminer les paramètres disponibles et leur utilisation : Get-command nom_cmdlet
Get-command get-pocess|format-list definition

Paramètres communs :

Paramètre  Type de données  Description
Verbose      Booleen  Génère une information concernant l’opération
debug         Boolean  Génère les détails de l’opération destiné au programmeur
ErrorAction  Enum     Détermine la réponse de l’applet de commande aux erreurs.
ErrorVariable String    Désigne une variable qui stocke les erreurs de la commande pendant son exécution
Outvariable  string      Désigne une variable qui stocke la sortie de la commande pendant son exécution
OutBuffer    Int32        Détermine le nombre d’objets à placer dans le tampon avant d’invoquer l’applet de commande du pipeline
Whatif        Boolean   Affiche le déroulement de l'exécution de la commande, mais sans réellement l'exécuter. *
Confirm      Boolean   Demande une autorisation avant d'effectuer toute action qui modifie le système. *

* Ces deux dernier paramètres sont particuliers car ils exigent que l’applet de commande prennent en charge la méthode .net ShouldProcess.

la suite à commandes de base (source: http://windowsforensique.com/index.php/admin-powershell/fondamentaux/com...)


Autorité de certification CA (avec makecert)

La commande makecert.exe est installée avec Office ou Visual Studio.
makecert.exe -n "CN=Dsfc" -a sha1 -eku 1.0 -r -sv private.pvk certificat.cer -ss Root -sr localMachine

Associer un certif à un script  :
$cert=@(Get-ChildItem cert:\Currentuser\My)[0]
Set-AuthenticodeSignature d:\test.ps1 $cert

Aide

get-host (donne v powershell), get-help ...
Pour actualiser l'aide: Update-Help