| [2.4. L’operador pipe ( | )](#24-loperador-pipe-) |
PowerShell és una eina de línia de comandes avançada desenvolupada per Microsoft que substitueix l’antiga CMD (Command Prompt). A diferència d’altres intèrprets de comandes que treballen amb text, PowerShell treballa amb objectes, la qual cosa el fa molt més potent i flexible.
💡 Nota important: Algunes comandes requereixen privilegis d’administrador. Quan vegis un error de permisos, intenta executar PowerShell com a Administrador.
Les comandes en PowerShell s’anomenen cmdlets (es pronuncia “command-lets”). Tots els cmdlets segueixen una estructura molt clara:
Verb-Nom
Per exemple:
Get-Location (obtenir la ubicació actual)Set-Location (establir/canviar la ubicació)Get-ChildItem (obtenir els elements fills/contingut)New-Item (crear un nou element)| Verb | Significat |
|---|---|
| Get | Obtenir/consultar informació |
| Set | Establir/modificar alguna cosa |
| New | Crear alguna cosa nova |
| Remove | Eliminar/esborrar |
| Start | Iniciar/arrencar |
| Stop | Aturar/parar |
| Enable | Activar/habilitar |
| Disable | Desactivar/deshabilitar |
PowerShell permet usar àlies (noms curts) per als cmdlets. Això és útil per a escriure més ràpid, especialment si vens de CMD o Linux.
| Cmdlet complet | Àlies | Equivalent a (CMD/Linux) |
|---|---|---|
| Get-ChildItem | dir, ls, gci | dir (CMD), ls (Linux) |
| Set-Location | cd, sl | cd |
| Get-Location | pwd, gl | pwd |
| Copy-Item | copy, cp | copy, cp |
| Remove-Item | del, rm | del, rm |
| Move-Item | move, mv | move, mv |
Veure tots els àlies d’un cmdlet:
Get-Alias -Definition Get-ChildItem
Un dels recursos més útils és el sistema d’ajuda integrat:
Get-Help <nom-del-cmdlet>
Per exemple:
Get-Help Get-ChildItem
Get-Help <cmdlet> -Examples → Mostra exemples pràcticsGet-Help <cmdlet> -Full → Mostra informació completa i detalladaGet-Help <cmdlet> -Online → Obri l’ajuda al navegador💡 Consell: La primera vegada que usis Get-Help, PowerShell et demanarà actualitzar l’ajuda. Executa
Update-Helpdes d’una consola d’Administrador per descarregar tota la documentació.
| L’operador pipe ( | ) és un dels més potents de PowerShell. Permet connectar comandes de manera que l’eixida d’una es converteix en l’entrada de la següent: |
Comanda1 | Comanda2 | Comanda3
Exemple pràctic:
Get-Process | Where-Object {$_.CPU -gt 10} | Sort-Object CPU -Descending
Aquest comando:
Get-Process)Where-Object)Sort-Object)Set-Location C:\Windows
cd C:\Users
cd .. # Pujar al directori pare
cd ~ # Anar al directori home de l'usuari
Get-Location
Get-ChildItem # Contingut del directori actual
Get-ChildItem C:\Windows # Contingut de C:\Windows
Get-ChildItem -Force # Inclou arxius ocults
Get-ChildItem -Recurse # Inclou subdirectoris recursivament
Get-ChildItem *.txt # Només arxius .txt
Get-ChildItem -Filter *.pdf # Alternativa per filtrar
Get-ChildItem -Include *.jpg,*.png # Diversos tipus d'arxiu
New-Item -Path "ElsMeusDocuments" -ItemType Directory
mkdir Projectes
New-Item -Path "C:\Temp\Prova" -ItemType Directory
New-Item -Path "arxiu.txt" -ItemType File
New-Item "C:\Temp\notes.txt" -ItemType File
Copy-Item arxiu.txt C:\Backup\
Copy-Item *.pdf D:\Documents\
Copy-Item Carpeta D:\Backup\ -Recurse # Copiar carpeta amb contingut
Move-Item arxiu.txt C:\Temp\
Move-Item *.log D:\Logs\
Rename-Item arxiu.txt nou_nom.txt
Rename-Item Carpeta NovaCarpeta
Remove-Item arxiu.txt
Remove-Item *.tmp # Elimina tots els .tmp
Remove-Item Carpeta -Recurse # Elimina carpeta i contingut
Remove-Item Carpeta -Recurse -Force # Sense demanar confirmació
⚠️ Precaució: El paràmetre
-Forceelimina arxius sense demanar confirmació. Usa’l amb cura, especialment amb-Recurse.
Get-Content arxiu.txt
Get-Content C:\Windows\System32\drivers\etc\hosts
cat log.txt | Select-Object -First 10 # Primeres 10 línies
Get-Content arxiu.txt | Where-Object {$_ -match "error"}
Get-Content log.txt | Select-String "WARNING"
"Hola món" | Out-File hola.txt
"Primera línia" | Set-Content arxiu.txt
"Segona línia" | Add-Content arxiu.txt # Afegir al final
Import-Csv dades.csv -Delimiter ";"
Import-Csv alumnes.csv | Where-Object {$_.Nota -gt 5}
Import-Csv dades.csv | Sort-Object Cognom | Export-Csv ordenat.csv
Get-Process
Get-Process -Name chrome*
Get-Process | Where-Object {$_.CPU -gt 100} # Processos amb alta CPU
Start-Process notepad
Start-Process chrome https://www.google.com
Stop-Process -Name notepad
Stop-Process -Id 1234
Get-Process chrome | Stop-Process # Tancar tots els Chrome
Get-Service
Get-Service -Name wuauserv
Get-Service | Where-Object {$_.Status -eq "Running"}
Start-Service -Name wuauserv
Stop-Service -Name wuauserv
Restart-Service -Name wuauserv
Set-Service -Name wuauserv -StartupType Disabled
💡 Nota: La gestió de serveis normalment requereix privilegis d’administrador.
PowerShell permet gestionar usuaris locals i d’Active Directory. Per a usuaris d’Active Directory necessites instal·lar el mòdul corresponent.
Get-LocalUser
Get-LocalUser -Name joan
New-LocalUser "usuari1" -NoPassword
New-LocalUser "usuari2" -Password (ConvertTo-SecureString "Pass123!" -AsPlainText -Force)
Set-LocalUser -Name usuari1 -Description "Usuari de prova"
Disable-LocalUser -Name usuari1
Enable-LocalUser -Name usuari1
Remove-LocalUser -Name usuari1
Get-LocalGroup
Get-LocalGroupMember -Group "Administradors"
New-LocalGroup -Name "Desenvolupadors" -Description "Equip de desenvolupament"
Add-LocalGroupMember -Group "Desenvolupadors" -Member "usuari1"
Remove-LocalGroupMember -Group "Desenvolupadors" -Member "usuari1"
Get-NetAdapter
Get-NetIPAddress
Get-NetIPConfiguration
Get-NetRoute
Enable-NetAdapter -Name "Ethernet"
Disable-NetAdapter -Name "Ethernet"
Rename-NetAdapter -Name "Ethernet" -NewName "LAN"
Remove-NetIPAddress -InterfaceAlias "Ethernet"
Remove-NetRoute -InterfaceAlias "Ethernet"
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.50 `
-PrefixLength 24 -DefaultGateway 192.168.1.1
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" `
-ServerAddresses 8.8.8.8,8.8.4.4
Test-NetConnection google.com
Test-NetConnection 192.168.1.1 -TraceRoute
Resolve-DnsName google.com
Get-NetTCPConnection -State Established