Get-Member
pour voir les méthodes et les propriétés des objets. Pas de différences entre majuscules et minuscules. Comme dans linux, on peut utiliser le symbole | pour faire un pipeline, c'est à dire connecter la sortie d'une commande avec l'entrée d'une autre.Move-Item -path test -destination repertoiretest
aura le même effet que Move-Item test repertoiretest
.Get-Help
ou man
: Recevoir de l'aide. Get-Help *
pour recevoir de l'aide sur tout, Get-Help get-command
pour recevoir de l'aide sur "get-command". On peut aussi souvent utiliser le paramètre "-?" derrière une commande pour afficher les mêmes informations. Il existe les paramètres "-detailed" et "-full" pour avoir plus d'informations.get-command
: Affiche les cmdlet disponibles. On peut faire get-command -verb write
pour n'afficher que les cmdlet prenant en compte tel ou tel verbe, ou encore get-command -noun service
. Quand on cherche une commande qui s'applique à des ordinateurs par exemple, on peut faire Get-Command *computer
. On peut aussi faire Get-Command get*
par exemple, pour avoir la liste des commandes commençants par "get".Get-ChildItem
ou dir
: Obtient les éléments d'un emplacement. Ou peut utiliser "-Recurse" pour obtenir les éléments d'un sous dossier. ). "a" indique que le bit d'archive est activé, "r" que l'objet est en lecture seule, “h” qu'il est caché, et "s" que c'est un objet système. Pour voir les fichiers cachés, utiliser le paramètre "-Force". On peut utiliser des jockers, par exemple : Get-ChildItem c:\windows\ *.log
. On peut combiner les attributs, par exemple ici on affiche les fichiers cachés ET (+) qui ne sont pas (!) des répertoires : Get-ChildItem c:\windows -attributes hidden+!directory
. Affiche les fichiers cachés OU les répertoires (,) : Get-ChildItem c:\windows -attributes hidden,directory
. On peut se servir de Get-Childtem pour obtenir une seule propriété d'un objet : (Get-ChildItem test1).CreationTime
.format-list
: Formate le résultat d'une commande en liste. Par exemple, GetChildItem | format-list
. Son alias est "fl". On peut choisir les prioriétés à afficher. Exemple : Get-ChildItem C:\Windows -Recurse | Format-List -Property FullName,CreationTime,LastWriteTime
. Pour afficher tout ce qu'il est possible d'afficher : Get-ChildItem | fl *
.format-table
: Similaire à la commande précédente, formate le résultat d'une commande en table. Par exemple, GetChildItem | format-table
. Son alias est "ft". On peut choisir les paramètres à afficher. Par défaut toutes les colonnes ont la même tailles, on peut régler ça avec le paramètre "-autosize" (attention, si on active autosize, l'affichage des colonnes ne se fera qu'une fois que tout ce qui doit être affiché est calculé, donc à éviter dans les scripts qui prennent du temps). Il est également possible de grouper selon des propriétés identiques. Exemple : Get-ChildItem | Format-Table -property CreationTime, Name -autosize -groupby creationtimee
.Format-Wide
: Formate le résultat d'une commande en affichant une seule propriété, par exemple uniquement le nom d'un fichier. Get-ChildItem | Format-Wide
.get-service
/ stop-service
/ start-service
: Affiche/stoppe/démarre les services disponibles sur l'ordinateur. Pour ne voir que les services qui sont démarrés : get-service | where-object {$_.Status -eq 'Running'}
. On peut filtrer par nom avec le paramètre "-name" ou "-display name" : Get-Service -name W32time
. Là aussi il peut être intéressant de filtrer avec Format-List et Property : Get-Service | Format-List -Property Name, DisplayName, Status
. Et pour combiner : Get-Service | Where-Object {$_.Status -eq 'Running'} | fl -property DisplayName, status
.Get-Alias
/ Set-Alias
: affiche/créé des alias. Les alias créé ne sont valides que pour la session powershell en cours. Pour les garder, 2 solutions, soit les exporter et les importer avec Export-Alias
et Import-Alias
, soit modifier son fichier profile powershell ($profile
pour voir le chemin -qui n'existe pas forcément sur le disque, on peut ajouter des commandes à ce profile, qui seront lancées au démarrage de powershell).New-Item
: Créé un nouvel objet, peut créer un fichier ou un autre répertoire si on est dans un répertoire, peut créer une clef dans la base de registre, une variable d'envrionnement si on est en train de les explorer... Par défaut créé dans le répertoire courant et demande le type. On peut aussi faire New-Item -Path c:\nouveaufichier -ItemType file -Force
. On peut également remplir le fichier, un peu comme un touch sous linux, : new-item test -ItemType file -value "coucou tout le monde"
.test-path
: Test l'existence d'un chemin.get-member
: Affiche les propriétés et les méthodes des objets. Par exemple Get-ChildItem | Get-Member
montre qu'on peut utiliser la propriété "LastWriteTime", ce qui permet de faire quelque chose comme Get-ChildItem -Path C:\ -Recurse | Where-Object {$_.LastWriteTime -gt (get-date).addDays(-1)}
. Il est intéressant de créer une variable texte "var" et d'utiliser get-member.Get-EventLog
: Le contenu de l'observateur d'évènement.Sort-Object
: Classer les objets, par exemple Get-EventLog System | Group-Object eventid | Sort-Object Count -descending
.GetUnique
: élimine les doublons d'une liste d'objets.Convertto-HTML
: Convertit la sortie d'une commande en HTML. Get-Process | ConvertTo-html | out-file “Processes.html”
Export-CSV
: Exporter la sortie en csv (comma separated values, s'ouvre dans excel). Get-Process | Export-CSV Processes.csv
.get-process
: Liste les processus en cour sur la machine.Invoke-Item
: Ouvre un fichier avec le programme par défaut (équivalent de cliquer dessus).Rename-Item
: Renomme un objet.Remove-Item
: Supprime un objet (fichier, clef de registre, variable d'environnement, selon le type de disque qu'on est en train d'explorer). Remove-Item test
. On peut l'utiliser avec un jocker *. Penser qu'on peut la combiner avec get-ChildItem par exemple, avec un pipe Get-ChildItem C:\ Temp\* -Include *.txt -Recurse | RemoveItem
. Utiliser le paramètre "-Force" pour supprimer un fichier caché, en lecture seule ou protégé.move-Item element_a_bouger destination
: Déplace un fichier ou un dossier dans un autre. Move-Item test2 test1
met le dossier test2 dans test1. On peut utiliser le jocker *. Si le dossier de destination n'existe pas, le dossier de départ sera renommé.get-content
: Lit le contenu d'un fichier, d'une variable d'environnement, d'une clef de registre...set-location
/ get-location
(ou pwd
) : Pour accéder à un disque ou un dossier / afficher l'endroit où on se trouve.PSDrive
: Liste des disques "virtuels". Par exemple, on peut voir qu'on parcourir et utiliser la base de registre comme un disque car elle est listée par PSDrive comme "HKCU". Pour y accéder : Set-Location HKCU:
. On peut également voir ici les variables d'environnement (Set-Location env:
). Ces "disques" sont fournis par des "providers". Des fournisseurs peuvent être développés par des éditeurs tiers.psprovider
: Affiche la liste des fournisseurs qui offrent des "disques virtuels" pour naviguer dans la base de registre, les variables d'environnement etc comme s'il s'agissait d'un disque. Taper help nom_du_fournisseur
pour de l'aide.more
: S'utilise après un pipe pour afficher page par page, par exemple get-command | page
.Where-Object
, where
: Sélectionne les objets qui lui sont envoyés ayant un certain paramètre spécifié. Par exemple Get-ChildItem c:\windows | Where-Object {$_.length -gt 32kb}
ou encore Get-ChildItem c:\windows | Where-Object {$_.lastwritetime -gt '01/09/2014'}
. Le terme "$_" indique qu'on traite l'objet courant. On analyse donc les propriétés "lastwritetime" ou "length" de l'objet courant. Il existe une syntaxe simplifiée qui ne fonctionne pas dans tous les cas, donc à éviter: Get-ChildItem c:\windows | Where length -gt 32kb
.Copy-Item objet_a_copier destination
: copie un objet. Penser au paramètre "-recurse". Si le dossier de destination n'existe pas, il sera créé.Write-Host
: Envoie des données à la console, rien au pipeline, donc impossible d'écrire dans un fichier par exemple. A réserver à un usage informatif.Write-Output
: Envoie des données vers la sortie standard par défaut, ou vers autre chose. "Write-Output" est implicite lorsqu'on tape une variable.Read-host
:
$a=Read-Host "Tapez une lettre"~, enregistre dans une variable le texte saisi l'utilisateur.echo "test">test.txt
echo "test">>test.txt
(on peut aussi utiliser Out-File si on a besoin de préciser l'encodage).Get-Service | Where-Object {$_Status -eq 'Stopped'}
.gettype()
est une méthode pour récupérer le type d'une variable.1..10
affichera une liste de nombres de 1 à 10.$a -is [char]
.$a='a','b','c','d'
ou $b=1,2,3,4
. Pour afficher la première valeur du tableau $a, faire $a[0]. On peut afficher plusieurs valeurs en même temps en faisant $a[0,2,3] par exemple. Pour afficher toutes les valeurs des tableaux,il suffit de taper son nom ($a). Par défaut les éléments sont séparés par un saut de ligne, on peut les séparer par autre chose avec -join : $tab -join '|'
. Pour concaténer 2 tableaux, utiliser '+'. Pour ajouter un élément à un tableau, on peut utiliser $a += "elementaajouter"
ou "$a.Add("elementaajouter")". Impossible de supprimer un élément d'un tableau, il faut créer un nouveau tableau sans les valeurs que l'on ne veut pas : par exemple, pour sauter la valeur 4 : $b=$a[0..3+5]
. On peut aussi utiliser Where-Object pour filtrer : $a=$a|Where-Object {$_ -ne 'b'}
fait un nouveau tableau pour les valeurs n'étant pas égales à 'b'.
PS U:\> $asso=@{lait=3;pain=1;confiture=5}
PS U:\> $asso
Name Value
---- -----
confiture 5
pain 1
lait 3
PS U:\> $asso['pain']
1
PS U:\> $asso.pain
1
PS U:\> $asso.'pain'
1
Comparaisons | ⇒ | Pour effectuer des comparaisons, on utilise -eq (égal à), -ceq (égal au texte, en respectant la casse) -ne (non égal à), -gt (supérieur à), -ge (supérieur ou égal à), -lt (inférieur à), -le (inférieur ou égal). Si ces opérateurs sont appliqués à un tableau, ils retournent les valeurs trouvées (-eq est souvent utilisé pour savoir si un élément est dans un tableau). On peut également utiliser -like et -notlike pour tester en utiliser un jocker qui signifiera "n'importe quel caractère, en n'importe quelle quantité". 'test' -like 'te*' renvoie true, 'test' -like 'ab*' renvoie false. Le caractère "?" permet de mettre un jocker pour un seul caractère : 'test' -like 'tes?' renvoie true, 'test' -like 'te*' renvoie false. Utiliser -clike et -cnotlike pour respecter la casse.Pour les expressions régulière on utiliser -match et notmatch. -in, -notin pour savoir si un objet est dans une collection. -contains, -notcontains pour savoir si une collection contient un objet. |
Opérateurs logiques | ⇒ | -and (et), -or (ou), -not(non), !(non), -xor (ou exclusif).(1 -eq 1) -and (2 -eq 2) renvoie true, (1 -eq 1) -and (2 -eq 1) renvoie false. |
Opérateurs binaires | ⇒ | -band, -bor, bnot, -bxor. |
#Affiche "lol" sans s'arrêter.
$a=1
while ($a=1){
echo lol
}
#affiche "lol" sans s'arrêter.
$a=1
do{
echo lola
}
while($a=1)
#Compte de 0 à 99.
for($i=0;$i -lt 99;$i++){
echo $i
}
#Affiche chaque élément précédé de "->"
$tableau='automobile','brouette','citroën','dacia'
foreach ($element in $tableau){
write-host -> $element
}
#Affiche "[nom du processus] a pour status [status]
foreach($element in Get-Service){
"$($element.Name) a pour status $($element.status)"
}
#Affiche "[nom du processus] a pour status [status]
Get-Service|Foreach{
"$($_.name) a pour $($element.status)"
}
#Un programme qui gagne tout le temps à pierre/papier/ciseaux
$a=Read-Host
switch($a){
"pierre"{"Papier ! J'ai gagné !"}
"ciseau"{"Pierre ! J'ai gagné !"}
"papier"{"Ciseaux ! J'ai gagné !"}
default{"Il faut saisir `"pierre`", `"papier`" ou `"ciseaux`"..."}
}
function nom_de_la_fonction~{}
function moitie {
param ([float]$a)
$a/2
}
PS C:\> moitie 7
3,5
PS U:\> function echolol{
>> "lol"
>> }
>>
PS U:\> echolol
lol
param([type]var1,[type]var2
. Il vaut mieux travailler avec des paramètres que des variables car quand on fait un "Get-Help", on peut voir les paramètres des fonctions qu'on a créé.
#rajoute "lol" derrière un message
function echo_message_et_lol{
param ([string]$message)
"$message lol"
}
try {
Mettre ici du code que l'on veut essayer d'exécuter.
}
catch {
En cas d'erreur, on peut la gérer ici.
}
finally{
Mettre ici quelque chose qui doit s’exécuter dans tous le cas, erreur ou non.
}
catch [System.Management.Automation.MethodInvocationException]{
En cas d'erreur System.Management.Automation.MethodInvocationException, on peut la gérer ici.
}
filter Get-Oldfiles{
if($($_.CreationTime).year -lt 2010){
$_
}
}
filter Get-Oldfiles{
begin {
"Liste des fichiers antérieurs à 2010...."
$i=0
}
Process {
if($($_.CreationTime).year -lt 2010){
$_
$i=$i+1
}
}
End{
"$i fichier(s) trouvé(s)"
}
}
Get-ChildItem "c:\program files"
ne fonctionnerait pas correctement sans guillemets.
PS C:\> $var="test"
PS C:\> "$var"
test
PS C:\> '$var'
$var
$(Get-ChildItem test1).Length
donne la taille de test1, pour l'afficher, faire echo "La taille fait $($(Get-ChildItem test1).Length)"
.echo "Peut servir à afficher le caractère `" sans fermer la ligne."
Caractère | Effet |
---|---|
`n | Saut de ligne |
`f | Saut de page (à utiliser avec imprimantes) |
`r | Retour chariot (`r`n dans les fichers sous windows) |
`a | Bip sur le haut parleur du PC |
`b | Retour arrière |
`t | Tabulation horizontale |
`v | Tabulation verticale |
`0 | Null |
echo
, Write-Ouput
ou Write-Host
. Ce dernier permet d'utiliser des couleurs, par exemple :Write-Host "Ce texte est en rouge" -foregroundcolor "red"
write-warning
, write-debug~ et
~write-verbose
.PS C:\> "test" -replace "te","ap"
renverra "apst". Il peut remplacer en utilisant une expression régulière.$adresse=[System.Net.Dns]::GetHostAddresses($Data) | out-string
$loginAD=[string]$loginAD
.$a="bonjour" + " tout le monde"
. Il existe également l'opérateur -join (et son inverse, -split).
PS U:\> $tab='a','b','c'
PS U:\> $tab -join ' ET '
a ET b ET c
$tabadresse=$adresses -split("delimiteur")
$tabadresse=$adresses.split("delimiteur ")
PS C:\> @'
>> Ceci est un test.
>> Merci.
>> '@
>>
Ceci est un test.
Merci.
$maVariable = 'Bonjour !'
$maVariable.ToUpper() //affiche "BONJOUR !", c'est une méthode, noter les parenthèses
$maVariable.length //affiche "9", c'est une propriété, noter l'absence de parenthèses
Update-Help -UICulture en-us -Force
$CurrentCulture = $Host.CurrentUICulture.Name
If ($CurrentCulture -ne 'en-us'){
if ( -not (Test-Path $PSHOME\$CurrentCulture)){
$null = New-Item $PSHOME\$CurrentCulture -ItemType Directory
}
Copy-Item $PSHOME\en-us\* -Destination $PSHOME\$CurrentCulture
}
get-command -CommandType cmdlet | group-object Cmdlet
ou get-command -CommandType cmdlet | Measure-Object
chcp
fc fichier1 fichier2
FOR /L %i in (1,1,5) do echo test %%i
Robocopy C:\A C:\B /E /M
tasklist
netstat
netstat -ano
netsh int show int
et netsh int ipv4 show int
echo %time%
wmic useraccount get name,sid
ping 1.2.3.4
ping test.lan
ping MACHINE5
Réponse de 1.2.3.4 : octets=32 temps=2 ms TTL=63
net stop w32time
w32tm /config /syncfromflags:manual /manualpeerlist:"1.fr.pool.ntp.org"
w32tm /config /reliable:yes
net start w32time
w32tm /config /update /manualpeerlist:"0.fr.pool.ntp.org,0x8 1.fr.pool.ntp.org,0x8 2.fr.pool.ntp.org,0x8 3.fr.pool.ntp.org,0x8" /syncfromflags:manual
w32tm /resync
w32tm /query /status
netstat -r
ou route print
route ADD reseau_vers_lequel_aller MASK masque_sous_reseau passerelle
net user
arp -a
arp -d
nbtstat
nslookup
set type=mx
DCDIAG > c:log.txt
.tracert 1.2.3.4
tracert -d 1.2.3.4
pour éviter de résoudre les noms d'hôte et aller plus vite.net use w: 1.2.3.4\serveurdossier
net use x: \\ip__ou_adresse_du_serveur votremotdepasse /user:nomuser@domaine
net use w: delete
NET USE * /DELETE /YES
net session \1.2.3.4 /delete
net use \1.2.3.4 /delete
cmdkey /list
shutdown-r
ipconfig /displaydns
ipconfig /flushdns
dsquery server -hasfsmo rid
mklink "C:\partage\MonFilm.mkv" "C:\films\MonFilm.mkv"
CertUtil -hashfile NomDuFichier MD5
WheelRight::Send {XButton2}
WheelLeft::Send {XButton1}
XButton1::Send {XButton1}
XButton1 & WheelUp::Send {Volume_Up}
XButton1 & WheelDown::Send {Volume_Down}
XButton1 & MButton::Send {Volume_Mute}
DateFinVal=:type.date_to_str(get:Mandat.date_fin_val)
obj.find($package:classe, critères de recherche, variable pour stocker la/les solutions, façon de trier)
:obj.find ($prsnorg:cp_prsn, [nm_st = "TORETTO"], Prsn,nil)
:obj.find ($prsnorg:cp_prsn (nil), [nm_st = "TORETTO"], Prsn,nil)
m:obj.find ($prsnorg:cp_prsn, [nm_st like "%ETTO%"], MesSolutionsDePersonne,nil)
m:obj.find ($prsnorg:cp_prsn, [nm_st in MaListe], MesSolutionsDePersonne,nil)
MaListeDeSolution = compute list (MesSolutionsDePersonnes)
where
(
m:obj.find ($prsnorg:cp_prsn, [nm_st like "%ETTO%"], MesSolutionsDePersonnes, nil)
)
== Renvoyer une liste contenant toutes les solutions pour les noms de personnes ayant %ETTO% dans le nom (on met le nom dans le résultat) ==
MaListeDeSolution = compute list ([MesSolutionsDePersonnes,MonBelIdDePersonne])
where
(
m:obj.find ($prsnorg:cp_prsn, [nm_st like "%ETTO%"], MesSolutionsDePersonnes, nil)&
MonBelIdDePersonne=get:MesSolutionsDePersonnes.display_id
)
:obj.find ($tcwrkmgt:cp_actvty, [extrnl_idntfr = "2018041200098490P"], MaSolutionDActes,nil) &
m:obj.find($header:cp_contract,[l_owner_1==MaSolutionDePersonne],MesSolutionsDeContrat,nil)
:obj.find ($prsnorg:cp_prsn, [nm_st = "TORETTO"], MaSolutionDePersonne,nil) &
m:obj.find($header:cp_contract,[l_owner_1==MaSolutionDePersonne],MesSolutionsDeContrat,nil)
:obj.find ($prsnorg:cp_prsn, [nm_st = "TORETTO"], MaSolutionDePersonne,nil) &
m:obj.find($header:cp_contract,[l_owner_1==MaSolutionDePersonne],MesSolutionsDeContrat,nil)&
m:obj.find($investmt:cp_allctn_actvty_cntrct_cvrg,[l_cntrct==MesSolutionsDeContrat],MesSolutionsDeFluxDuContrat,nil);
:obj.find ($prsnorg:cp_prsn, [nm_st = "TORETTO"], MaSolutionDePersonne,nil) &
m:obj.find($header:cp_contract,[l_owner_1==MaSolutionDePersonne],MesSolutionsDeContrat,nil)&
MaListeDeFluxParContrat = compute list(MesSolutionsDeFluxDuContrat) %on va constituer une liste des solutions de flux par contrat
where
(
m:obj.find($investmt:cp_allctn_actvty_cntrct_cvrg,[l_cntrct==MesSolutionsDeContrat],MesSolutionsDeFluxDuContrat,nil)
)
:obj.find ($prsnorg:cp_prsn, [nm_st = "TORETTO"], MaSolutionDePersonne,nil) &
m:obj.find($header:cp_contract,[l_owner_1==MaSolutionDePersonne],MesSolutionsDeContrat,nil)&
MaListeDeFluxParContrat = compute list([MesSolutionsDeFluxDuContrat,MonBelIdDeFlux]) %on va constituer une liste des solutions de flux par contrat
where
(
m:obj.find($investmt:cp_allctn_actvty_cntrct_cvrg,[l_cntrct==MesSolutionsDeContrat],MesSolutionsDeFluxDuContrat,nil)&
MonBelIdDeFlux=get:MesSolutionsDeFluxDuContrat.display_id
)