Diferència entre revisions de la pàgina «ASIX/M06/UF2/PT1»

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca
m (Guillem ha mogut M06/UF2/PT1 a ASIX/M06/UF2/PT1 sense deixar una redirecció: Crear subnivell ASIX)
 
(Hi ha 37 revisions intermèdies del mateix usuari que no es mostren)
Línia 2: Línia 2:
 
{{capcalera|Guillem Solà i Boeck|22}}
 
{{capcalera|Guillem Solà i Boeck|22}}
 
==Capítol 1: Configurant la finestra de consola de PowerShell==
 
==Capítol 1: Configurant la finestra de consola de PowerShell==
===Exercici 1: Personalitzar un accés directe que apunti a un directori específic===
+
===Exercici 1===
 +
Personalitzar un accés directe que apunti a un directori específic
 
====Solució====
 
====Solució====
 
(exercici teòric)
 
(exercici teòric)
===Exercici 2: Personalitzant el color i el tamany del texte===
+
===Exercici 2===
 +
Personalitzant el color i el tamany del texte
 
====Solució====
 
====Solució====
 
Des del menú Herramientas{{fletxadreta}}opciones podem canviar aquests paràmetres. Jo deixaré per defecte els colors que ja hi van i la font i mida que ve predefinida.
 
Des del menú Herramientas{{fletxadreta}}opciones podem canviar aquests paràmetres. Jo deixaré per defecte els colors que ja hi van i la font i mida que ve predefinida.
 
{{imatge|ps1.png}}
 
{{imatge|ps1.png}}
===Exercici 3: Familiaritzant-nos amb les característiques d'edició de la consola de PowerShell===
+
===Exercici 3===
 +
Familiaritzant-nos amb les característiques d'edició de la consola de PowerShell
 
====Solució====
 
====Solució====
 
(exercici teòric)
 
(exercici teòric)
  
 
==Capítol 2: Iniciació a les comandes en PowerShell==
 
==Capítol 2: Iniciació a les comandes en PowerShell==
===Exercici 1: Llista tots els cmdlet que utilitzen els verbs "Add", "Clear", "New", and "Set"===
+
===Exercici 1===
 +
Llista tots els cmdlet que utilitzen els verbs "Add", "Clear", "New", and "Set"
 
====Solució====
 
====Solució====
 
<source lang='powershell'>get-command -Verb Add</source>
 
<source lang='powershell'>get-command -Verb Add</source>
Línia 20: Línia 24:
 
<source lang='powershell'>get-command -Verb New</source>
 
<source lang='powershell'>get-command -Verb New</source>
 
<source lang='powershell'>get-command -Verb Set</source>
 
<source lang='powershell'>get-command -Verb Set</source>
===Exercici 2: Llista tots els cmdlet que utilitzen el substantiu "Service"===
+
===Exercici 2===
 +
Llista tots els cmdlet que utilitzen el substantiu "Service"
 
====Solució====
 
====Solució====
 
<source lang='powershell'>
 
<source lang='powershell'>
Línia 30: Línia 35:
  
 
==Capítol 4: Utilitzant cmdlets==
 
==Capítol 4: Utilitzant cmdlets==
===Exercici 1: Obre un terminal de PowerShell i realitza les següents tasques fent servir les Cmdlets corresponents===
+
===Exercici 1===
 +
Obre un terminal de PowerShell i realitza les següents tasques fent servir les Cmdlets corresponents
 
====Solució====
 
====Solució====
 
*'''Mostra el llistat de totes les tasques o processos'''
 
*'''Mostra el llistat de totes les tasques o processos'''
Línia 85: Línia 91:
  
 
==Capítol 5: Àlies predefinits==
 
==Capítol 5: Àlies predefinits==
===Exercici 1: Proveu aquests àlies: dir, ls, gci i Get-ChildItem===
+
===Exercici 1===
 +
Proveu aquests àlies: dir, ls, gci i Get-ChildItem
 
====Solució====
 
====Solució====
 
Tots 4 àlies fan el mateix: llisten el contingut del directori on ens trobem.
 
Tots 4 àlies fan el mateix: llisten el contingut del directori on ens trobem.
===Exercici 2: Proveu de fer el vostre propi àlies de qualsevol cmdlet de PS===
+
===Exercici 2===
 +
Proveu de fer el vostre propi àlies de qualsevol cmdlet de PS
 
====Solució====
 
====Solució====
 
Puc fer un àlies per al cmdlet ''Set-Service'' utilitzant ''ss''.
 
Puc fer un àlies per al cmdlet ''Set-Service'' utilitzant ''ss''.
 
<source lang='powershell'>Set-Alias ss Set-Service</source>
 
<source lang='powershell'>Set-Alias ss Set-Service</source>
===Exercici 3: Proveu la exportació i importació d’àlies i comprova que el teu àlies personalitzat és pot fer servir. Primer haureu d’exportar àlies, tancar la sessió de PS, tornar a obrir PS i importar els àlies===
+
===Exercici 3===
 +
Proveu la exportació i importació d’àlies i comprova que el teu àlies personalitzat és pot fer servir. Primer haureu d’exportar àlies, tancar la sessió de PS, tornar a obrir PS i importar els àlies
 
====Solució====
 
====Solució====
 
Creo l’àlies amb
 
Creo l’àlies amb
Línia 106: Línia 115:
  
 
==Capítol 6: Scripts en PowerShell==
 
==Capítol 6: Scripts en PowerShell==
 +
Els exercicis 1, 2 i 3 no existeixen.
 +
===Exercici 4===
 +
Per fer el nostre primer Script en PS obrirem un editor de texte, com per exemple el NOTEPAD i escriurem una línea amb la següent comanda <code>Write-Host "Hello World”</code> Guardarem aquest arxiu a la nostre carpeta ScriptsPS creada a l’inici amb el nom script1.ps1 i ja podrem executar-ho, simplement posant el nom script1.ps1 al terminal PS.
 +
====Solució====
 +
{{imatge|ps6.png}}
 +
===Exercici 5===
 +
Una segona forma de fer-ho seria obrint l’entorn POWERSHELL ISE, que ens proporciona una interfície gràfica amb diferents menús d’ajuda per poder crear el nostre Script. Aquestes ajudes ens permeten obtenir la sintaxi exacte de la comanda per a minimitzar errors. Feu el mateix script anterior amb l’ajuda de POWERSHELL ISE.
 +
====Solució====
 +
Creo un nou arxiu de PowerShell i el deso com a helloworldise.ps1
 +
{{imatge|ps7.png}}
 +
Llavors des de la consola, puc executar-lo amb ./helloworldise.ps1.
 +
{{imatge|ps8.png}}
 +
 
==Capítol 7: Variables en PowerShell==
 
==Capítol 7: Variables en PowerShell==
 +
===Exercici 1===
 +
Proveu de crear la vostra pròpia variable i després visualitzeu el valor amb Get-Variable
 +
====Solució====
 +
<source lang='powershell'>$Guillem = “PowerShell”
 +
Get-Variable
 +
</source>
 +
{{imatge|ps9.png}}
 +
===Exercici 2===
 +
Feu que us demani primer el vostre nom i després la vostra edat. Visualitzeu un missatge per pantalla com aquest:    Hola  <el vostre nom>, la teva edat és de <vostra_edat> anys
 +
====Solució====
 +
<source lang='powershell'>
 +
$nom = Read-Host "Com et dius? "
 +
$edat = Read-Host "Quants anys tens? "
 +
Write-Host "Hola $nom, la teva edat és $edat anys."
 +
</source>
 +
{{imatge|ps10.png}}
 +
===Exercici 3===
 +
Mostra per pantalla els tipus de les dues variables utilitzades a l’exercici anterior
 +
====Solució====
 +
Afegirem aquestes línies al final de l'script de l'exercici anterior i l'executarem:
 +
<source lang='powershell'>
 +
$tipusnom=$nom.GetType()
 +
$tipusedat=$edat.GetType()
 +
Write-Host "La variable nom és del tipus $tipusnom i l'edat és del tipus $tipusedat"
 +
</source>
 +
{{imatge|ps11.png}}
 +
 
==Capítol 8: Operacions amb Variables en PowerShell==
 
==Capítol 8: Operacions amb Variables en PowerShell==
 +
===Exercici 1===
 +
====Solució====
 +
(Exercici teòric)
 +
===Exercici 2===
 +
====Solució====
 +
(Exercici teòric)
 +
===Exercici 3===
 +
Experimenta amb PowerShell ISE les diferents opcions que podem fer amb un objecte.
 +
Utilitza la consola d’ajuda de ISE i fes proves amb 5 opcions diferents del que podem fer amb una
 +
variable de texte
 +
====Solució====
 +
<source lang='powershell'>
 +
$string="guillem sola"
 +
Write-Host $string.ToUpper() #Transformació a majúscules
 +
Write-Host $string.Substring(0,7) #Tallar entre la posició 0 i la 7 de la cadena
 +
Write-Host $string.Replace("sola","boeck") #Substitució de caràcters o substrings
 +
Write-Host $string.Equals("guillem" + " " + "sola") #Comprovar igualtat entre strings
 +
Write-Host $string.EndsWith("boeck") #Comprovar si la cadena acaba en una altra cadena definida
 +
</source>
 +
 +
'''Output'''
 +
<source>
 +
GUILLEM SOLA
 +
guillem
 +
guillem boeck
 +
True
 +
False
 +
</source>
 +
 
==Capítol 9: Estructures en PowerShell==
 
==Capítol 9: Estructures en PowerShell==
 +
===Exercici 1===
 +
Fes un script que et demani per pantalla dos números i que et digui després quin
 +
és el número més gran
 +
====Solució====
 +
<source lang='powershell'>
 +
$num1 = Read-Host "Escriu un número: "
 +
$num2 = Read-Host "Escriu un altre número: "
 +
if ($num1 -gt $num2){
 +
    Write-Host "El número 1 és més gran"
 +
}elseif ($num1 -eq $num2){
 +
    Write-Host "Són iguals"
 +
}else{
 +
    Write-Host "El número 2 és més gran"
 +
}
 +
</source>
 +
===Exercici 2===
 +
2:​Fes un script que et demani per pantalla ''T’AGRADA PROGRAMAR?''
 +
Si dius que SI en majúscules o minúscules t’ha de dir per pantalla ''MOLT BÉ''
 +
Si dius que NO en majúscules o minúscules t’ha de dir per pantalla ''UFF!!!''
 +
En altre cas t’ha de dir per pantalla ''NO T’ENTENC''
 +
====Solució====
 +
<source lang='powershell'>
 +
$agrada=Read-Host "T'agrada programar?"
 +
if ($agrada -ieq "si"){
 +
    Write-Host "MOLT BÉ"
 +
}elseif($agrada -ieq "no"){
 +
    Write-Host "UFF!!!"
 +
}else{
 +
    Write-Host "NO T'ENTENC"
 +
}
 +
</source>
 +
===Exercici 3===
 +
​Fes un script que et demani per pantalla un número entre el 0 i el 10 i que et digui després per pantalla la teva nota
 +
====Solució====
 +
<source lang='powershell'>
 +
[float] $nota = Read-Host "Entra un número del 0 al 10"
 +
switch ($nota) {
 +
{$_ -lt 5} {
 +
    Write-Host "SUSPÈS"
 +
    }
 +
 +
{$_ -ge 5 -and $_ -lt 7} {
 +
    Write-Host "APROVAT"
 +
    }
 +
 +
{$_ -ge 7 -and $_ -lt 9} {
 +
    Write-Host "NOTABLE"
 +
    }
 +
 +
{$_ -ge 9 -and $_ -le 10} {
 +
    Write-Host "EXCEL·LENT"
 +
    }
 +
 +
default {
 +
    Write-Host "Nota invàlida"
 +
    }
 +
}
 +
</source>
 +
===Exercici 4===
 +
​Amb una estructura repetitiva fes la suma dels 25 primers números naturals
 +
====Solució====
 +
<source lang='powershell'>
 +
[int] $suma=0
 +
[int] $num=1
 +
while ($num -le 25) {
 +
    $suma+=$num
 +
    $num++
 +
}
 +
Write-Host "La suma dels 25 primers números naturals és $suma."
 +
</source>
 +
 +
===Exercici 5===
 +
​Amb una estructura repetitiva fes la taula de multiplicar d’un número demanat per pantalla
 +
====Solució====
 +
<source lang='powershell'>
 +
[int] $numero = Read-Host "De quin número vols saber-ne la taula de multiplicar?"
 +
for ($i=0; $i -le 10; $i++) {
 +
    $resultat=$numero*$i
 +
    Write-Host "$numero x $i = $resultat"
 +
}
 +
</source>
 +
 +
===Exercici 6===
 +
​Crea un cmdlet de powershell que mostri un menú a l’usuari amb cuatre operacions disponibles: crear directori, eliminar directori, mostrar directori i sortir. Una vegada escollida una opció correcta el programa ha de sol·licitar un nom de directori i fer la operació sel·leccionada.
 +
====Solució====
 +
<source lang='powershell'>
 +
[int] $opcio=0
 +
while ($opcio -ne 4) {
 +
    Write-Host "CMDLET Control de directoris"
 +
    Write-Host "############################"
 +
    Write-Host "1. Crear directori"
 +
    Write-Host "2. Eliminar directori"
 +
    Write-Host "3. Mostrar directori"
 +
    Write-Host "4. Sortir"
 +
 +
    $opcio=Read-Host "Tria una opció:"
 +
 +
    switch($opcio){
 +
    1 {
 +
        Clear-Host
 +
        $dir= Read-Host "Quin directori vols crear?"
 +
        New-Item -ItemType directory -Path $dir
 +
        }
 +
 +
    2 {
 +
        Clear-Host
 +
        $dir= Read-Host "Quin directori vols eliminar?"
 +
        Remove-Item -Path $dir
 +
        }
 +
 +
    3 {
 +
        Clear-Host
 +
        $dir= Read-Host "Quin directori vols veure?"
 +
        Get-ChildItem $dir
 +
        }
 +
 +
    4 {
 +
        Clear-Host
 +
        Write-Host "Fins aviat!"
 +
        }
 +
 +
    default {
 +
        Clear-Host
 +
        Write-Host "Opció incorrecta"
 +
        }
 +
   
 +
    }
 +
    if ($opcio -ne 4){
 +
    Read-Host "Pressiona qualsevol tecla per a continuar"
 +
    Clear-Host
 +
        }
 +
}
 +
</source>
 +
 
==Capítol 10: Variables amb múltiples valors==
 
==Capítol 10: Variables amb múltiples valors==
 +
===Exercici 1===
 +
​Crea un script de PowerShell que defineixi un array relacional HASH amb usuaris. Els camp de cada usuari han de ser ''nom_compte'', ''nom_usuari'' i ''password''. El programa ha de mantenir aquest array amb un menú en el que es pugui:
 +
:*Afegir usuari
 +
:*Eliminar usuari
 +
:*Buscar per nom d’usuari
 +
:*Mostrar tots els usuaris
 +
====Solució====
 +
<source lang='powershell'>
 +
[int] $opcio=0
 +
$users = @{}
 +
 +
while ($opcio -ne 5) {
 +
    Write-Host "CMDLET Control d'usuaris"
 +
    Write-Host "############################"
 +
    Write-Host "1. Afegir usuari"
 +
    Write-Host "2. Eliminar usuari"
 +
    Write-Host "3. Buscar usuari per nom"
 +
    Write-Host "4. Mostrar tots els usuaris"
 +
    Write-Host "5. Sortir"
 +
 +
    $opcio=Read-Host "Tria una opció:"
 +
 +
    switch($opcio){
 +
    1 {
 +
        Clear-Host
 +
        Write-Host "AFEGIR USUARI"
 +
        $nom_compte= Read-Host "Nom del compte"
 +
        $nom_usuari= Read-Host "Nom de l'usuari"
 +
        $password= Read-Host -AsSecureString "Contrasenya"
 +
 +
        #Fer hash de la contrasenya
 +
        $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
 +
        $utf8 = new-object -TypeName System.Text.UTF8Encoding
 +
        $hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($password)))
 +
 +
        #Afegir valors
 +
        $users.Add("$nom_compte", @("$nom_usuari", "$hash"))
 +
        }
 +
 +
    2 {
 +
        Clear-Host
 +
        Write-Host "ELIMINAR USUARI"
 +
        $nom_compte= Read-Host "Quin usuari vols eliminar?"
 +
        $users.Remove("$nom_compte")
 +
        }
 +
 +
    3 {
 +
        Clear-Host
 +
        Write-Host "CERCA USUARI"
 +
        $nom_compte = Read-Host "Quin nom d'usuari vols veure?"
 +
        Write-Host $users[$nom_compte]
 +
        }
 +
 +
    4 {
 +
        Clear-Host
 +
        Write-Host "LLISTA TOTS ELS USUARIS"
 +
        $users
 +
       
 +
        }
 +
 +
    5 {
 +
        Clear-Host
 +
        Write-Host "Fins aviat!"
 +
        }
 +
 +
    default {
 +
        Clear-Host
 +
        Write-Host "Opció incorrecta"
 +
        }
 +
   
 +
    }
 +
    if ($opcio -ne 5){
 +
    Read-Host "Pressiona qualsevol tecla per a continuar"
 +
    Clear-Host
 +
        }
 +
}
 +
</source>
 +
 
==Capítol 11: Funcions en PowerShell==
 
==Capítol 11: Funcions en PowerShell==
 +
===Exercici 1===
 +
​Feu un script PowerShell que demani un caracter por pantalla i us digui després si és un número o una lletra. Aquest exercici s’ha de realitzar obligatòriament utilitzant una funció.
 +
====Solució====
 +
La manera de saber-ho és provar de fer un ''parsing'' del caràcter entrat cap a enter. Si la conversió és possible, serà un número; si no és possible fer el ''parsing'', serà una lletra. La implementació amb funcions serà doncs:
 +
<source lang='powershell'>
 +
function numeric_lletra($param){
 +
    if (([System.Int32]::TryParse($param, [ref] 0))){
 +
        Write-Host "És un número"
 +
    }else{
 +
        Write-Host "És una lletra"
 +
    }
 +
}
 +
 +
$caracter=Read-Host "Escriu un caràcter"
 +
numeric_lletra($caracter)
 +
</source>
 +
 
==Capítol 12: Exercicis varis en PowerShell==
 
==Capítol 12: Exercicis varis en PowerShell==
 +
===Exercici 1===
 +
Crear un arxiu de text anomenat ''exercici1.txt'' en el directori PRACTICA1 que hauràs creat prèviament
 +
====Solució====
 +
<source lang='powershell'>
 +
New-Item -ItemType file exercici1.txt
 +
</source>
 +
 +
===Exercici 2===
 +
Renombra l’arxiu creat anteriorment a ''exercici2.txt'' i mou-lo al directori POWERSHELL
 +
====Solució====
 +
<source lang='powershell'>
 +
Rename-Item exercici1.txt exercici2.txt
 +
</source>
 +
 +
===Exercici 3===
 +
​Crear un altre arxiu de text anomenat ''exercici3.txt'' que contingui el text
 +
<source>Hola, he creat un arxiu</source>
 +
al directori PRACTICA1
 +
====Solució====
 +
<source lang='powershell'>
 +
New-Item -ItemType file exercici3.txt
 +
Set-Content -Path exercici3.txt -Value "Hola, he creat un arxiu"
 +
</source>
 +
 +
===Exercici 4===
 +
​Afegir el text <code>Hola, una altra línia</code> a l’arxiu ''exercici3.txt'' creat anteriorment
 +
====Solució====
 +
<source lang='powershell'>
 +
Add-Content -Path exercici3.txt -Value "'r'nHola, una altra línia" #Els valors <code>'r'n</code> són els que generen el retorn de carro i la línia nova respectivament
 +
</source>
 +
 +
===Exercici 5===
 +
Esborrar l’arxiu ''exercici3.txt'' demanant confirmació
 +
====Solució====
 +
<source lang='powershell'>
 +
Remove-Item -Path exercici3.txt -Confirm:$true
 +
</source>
 +
 +
===Exercici 6===
 +
Feu un script que creï un arxiu ''LLISTAT.TXT'' on hi haurà la llista de tots els arxius ''.EXE'' de la unitat ''C:'' del vostre sistema
 +
====Solució====
 +
<source lang='powershell'>
 +
Get-ChildItem -Path C:\ -Recurse -Depth 2 -Filter "*.exe" | Format-List Name | Out-File -FilePath LLISTAT.TXT
 +
</source>
 +
 +
===Exercici 7===
 +
​Presentar en 4 columnes el nom del arxius de ''C:\Windows'' que comencin per ''A'' o per ''E'', inclosos els seus subdirectoris
 +
====Solució====
 +
<source lang='powershell'>
 +
Get-ChildItem -Path C:\Windows -File -Recurse -Depth 1 | Where {$_.Name -Like "a*" -or $_.Name -Like "a*"} | Format-Table -Wrap
 +
</source>
 +
 +
===Exercici 8===
 +
Feu un script que faci les següents tasques seqüencialment:
 +
#Mostri els serveis de Windows
 +
#Aturi el servei d’AUDIO demanant confirmació
 +
#Mostrar els serveis de Windows en mode PowerShell
 +
#Mostri els serveis de Windows en mode gràfic
 +
#Arrenqui el servei d’AUDIO en mode DEBUG
 +
Entre cada punt hi haurà una pausa de 3 segons
 +
====Solució====
 +
<source lang='powershell'>
 +
function retard($segons){
 +
    Start-Sleep -Seconds $segons
 +
}
 +
 +
#Llistar serveis com en CMD, suposo.
 +
net start
 +
retard(3)
 +
 +
#Per defecte no demana confirmació a no ser que defineixi -Confirm com a true
 +
Stop-Service AudioSrv -Confirm:$true
 +
retard(3)
 +
 +
#Mostrar els serveis en "mode powershell"? Quina diferència hi ha entre el punt 1 i el punt 3? Bastanta ambigüitat.
 +
Get-Service
 +
retard(3)
 +
 +
Start-Process -FilePath "C:\Windows\System32\services.msc"
 +
retard(3)
 +
 +
#Per defecte demana confirmació a no ser que defineixi -Confirm com a false
 +
Start-Service AudioSrv -Debug -Confirm:$false
 +
</source>
 +
[[Category:M06]]

Revisió de 11:21, 15 abr 2020

Contingut

Guillem Solà i Boeck (host A10BPC22)

Capítol 1: Configurant la finestra de consola de PowerShell

Exercici 1

Personalitzar un accés directe que apunti a un directori específic

Solució

(exercici teòric)

Exercici 2

Personalitzant el color i el tamany del texte

Solució

Des del menú Herramientas →opciones podem canviar aquests paràmetres. Jo deixaré per defecte els colors que ja hi van i la font i mida que ve predefinida.

Ps1.png


Exercici 3

Familiaritzant-nos amb les característiques d'edició de la consola de PowerShell

Solució

(exercici teòric)

Capítol 2: Iniciació a les comandes en PowerShell

Exercici 1

Llista tots els cmdlet que utilitzen els verbs "Add", "Clear", "New", and "Set"

Solució

get-command -Verb Add
get-command -Verb Clear
get-command -Verb New
get-command -Verb Set

Exercici 2

Llista tots els cmdlet que utilitzen el substantiu "Service"

Solució

get-command -type Cmdlet -name *Service*

Capítol 3: L’ajuda a PS

(capítol teòric sense exercicis)

Capítol 4: Utilitzant cmdlets

Exercici 1

Obre un terminal de PowerShell i realitza les següents tasques fent servir les Cmdlets corresponents

Solució

  • Mostra el llistat de totes les tasques o processos
Get-Process
  • Mostra el llistat de totes les tasques que comencin el seu nom per un caràcter que escullis
Llisto tots els processos que el seu nom comenci per s
Get-Process -ProcessName s*
  • Inicialitza un procés nou sense gaire repercussió pel sistema i atura'l mitjançant el seu PID
He arrencat OneDrive i he llistat els processos amb
Get-Process -ProcessName OneDrive
i he descobert que el seu pid és el 5720. Per a matar-lo, ho faig amb
Stop-Process -Id 5720
  • Mostra el temps de CPU que ha utilitzat un únic procés
Llisto el temps de CPU del procés explorer
Get-Process explorer | Format-List TotalProcessorTime
  • Llista aquells serveis que no estiguin aturats
get-service | where-object {$_.Status -ne 'Stopped'}
  • Llista aquells serveis indicant el nom del teu equip
El meu nom de host és DESKTOP-ET232A1. Per a buscar els serveis que s’executen al meu equip faré
get-service -ComputerName DESKTOP-ET232A1
  • Canvia el mode d'arrencada d'un servei d'automàtic a manual (després torna'l al seu valor original). Per poder-ho fer, primer hauràs llistar els serveis amb el mode d'arrencada automàtica
get-wmiobject win32_service -Filter "startmode = 'auto'"
Set-Service -Name WSearch -StartupType Manual
Set-Service -Name WSearch -StartupType Automatic
  • Amb quins Cmdlets podem realitzar les tasques de canvi d'estat de serveis? Fes la prova amb el servei “Computer Browser” i amb diferents estats
stop-service
start-service
restart-service
set-service
Passos a seguir:
  • Primer mostrar l’estat actual del Servicio Browser
Get-Service -Name Browser | Format-List "Status"
  • Després s’ha d’aturar
Stop-Service -Name Browser
  • Tornem a mirar l’estat
Get-Service -Name Browser | Format-List "Status"
  • Tornem a engegar el servei
Start-Service -Name Browser
  • Tornem a mirar l’estat
Get-Service -Name Browser | Format-List "Status"

Capítol 5: Àlies predefinits

Exercici 1

Proveu aquests àlies: dir, ls, gci i Get-ChildItem

Solució

Tots 4 àlies fan el mateix: llisten el contingut del directori on ens trobem.

Exercici 2

Proveu de fer el vostre propi àlies de qualsevol cmdlet de PS

Solució

Puc fer un àlies per al cmdlet Set-Service utilitzant ss.

Set-Alias ss Set-Service

Exercici 3

Proveu la exportació i importació d’àlies i comprova que el teu àlies personalitzat és pot fer servir. Primer haureu d’exportar àlies, tancar la sessió de PS, tornar a obrir PS i importar els àlies

Solució

Creo l’àlies amb

Set-Alias gs Get-Service

exporto els meus àlies fent

Export-Alias elsmeusalias.txt

comprovo que gs fa el mateix que Get-Service

Ps2.png


Tanco la powershell i torno a iniciar. Comprovo que ara l’àlies gs no existeix, importo elsmeusalias.txt i es carrega (els errors són deguts als àlies predefinits que ja existeixen i no es poden “sobreescriure”)

Ps3.png


Després, comprovo que gs ja funciona com a Get-Service:

Ps4.png


Capítol 6: Scripts en PowerShell

Els exercicis 1, 2 i 3 no existeixen.

Exercici 4

Per fer el nostre primer Script en PS obrirem un editor de texte, com per exemple el NOTEPAD i escriurem una línea amb la següent comanda Write-Host "Hello World” Guardarem aquest arxiu a la nostre carpeta ScriptsPS creada a l’inici amb el nom script1.ps1 i ja podrem executar-ho, simplement posant el nom script1.ps1 al terminal PS.

Solució

S'ha produït un error en crear la miniatura: No es pot desar la miniatura a la destinació


Exercici 5

Una segona forma de fer-ho seria obrint l’entorn POWERSHELL ISE, que ens proporciona una interfície gràfica amb diferents menús d’ajuda per poder crear el nostre Script. Aquestes ajudes ens permeten obtenir la sintaxi exacte de la comanda per a minimitzar errors. Feu el mateix script anterior amb l’ajuda de POWERSHELL ISE.

Solució

Creo un nou arxiu de PowerShell i el deso com a helloworldise.ps1

Ps7.png


Llavors des de la consola, puc executar-lo amb ./helloworldise.ps1.

S'ha produït un error en crear la miniatura: No es pot desar la miniatura a la destinació


Capítol 7: Variables en PowerShell

Exercici 1

Proveu de crear la vostra pròpia variable i després visualitzeu el valor amb Get-Variable

Solució

$Guillem = “PowerShell”
Get-Variable
Ps9.png


Exercici 2

Feu que us demani primer el vostre nom i després la vostra edat. Visualitzeu un missatge per pantalla com aquest: Hola <el vostre nom>, la teva edat és de <vostra_edat> anys

Solució

$nom = Read-Host "Com et dius? "
$edat = Read-Host "Quants anys tens? "
Write-Host "Hola $nom, la teva edat és $edat anys."
S'ha produït un error en crear la miniatura: No es pot desar la miniatura a la destinació


Exercici 3

Mostra per pantalla els tipus de les dues variables utilitzades a l’exercici anterior

Solució

Afegirem aquestes línies al final de l'script de l'exercici anterior i l'executarem:

$tipusnom=$nom.GetType()
$tipusedat=$edat.GetType()
Write-Host "La variable nom és del tipus $tipusnom i l'edat és del tipus $tipusedat"
S'ha produït un error en crear la miniatura: No es pot desar la miniatura a la destinació


Capítol 8: Operacions amb Variables en PowerShell

Exercici 1

Solució

(Exercici teòric)

Exercici 2

Solució

(Exercici teòric)

Exercici 3

Experimenta amb PowerShell ISE les diferents opcions que podem fer amb un objecte. Utilitza la consola d’ajuda de ISE i fes proves amb 5 opcions diferents del que podem fer amb una variable de texte

Solució

$string="guillem sola"
Write-Host $string.ToUpper() #Transformació a majúscules
Write-Host $string.Substring(0,7) #Tallar entre la posició 0 i la 7 de la cadena
Write-Host $string.Replace("sola","boeck") #Substitució de caràcters o substrings
Write-Host $string.Equals("guillem" + " " + "sola") #Comprovar igualtat entre strings
Write-Host $string.EndsWith("boeck") #Comprovar si la cadena acaba en una altra cadena definida

Output

GUILLEM SOLA
guillem
guillem boeck
True
False

Capítol 9: Estructures en PowerShell

Exercici 1

Fes un script que et demani per pantalla dos números i que et digui després quin és el número més gran

Solució

$num1 = Read-Host "Escriu un número: "
$num2 = Read-Host "Escriu un altre número: "
if ($num1 -gt $num2){
    Write-Host "El número 1 és més gran"
}elseif ($num1 -eq $num2){
    Write-Host "Són iguals"
}else{
    Write-Host "El número 2 és més gran"
}

Exercici 2

2:​Fes un script que et demani per pantalla T’AGRADA PROGRAMAR? Si dius que SI en majúscules o minúscules t’ha de dir per pantalla MOLT BÉ Si dius que NO en majúscules o minúscules t’ha de dir per pantalla UFF!!! En altre cas t’ha de dir per pantalla NO T’ENTENC

Solució

$agrada=Read-Host "T'agrada programar?"
if ($agrada -ieq "si"){
    Write-Host "MOLT BÉ"
}elseif($agrada -ieq "no"){
    Write-Host "UFF!!!"
}else{
    Write-Host "NO T'ENTENC"
}

Exercici 3

​Fes un script que et demani per pantalla un número entre el 0 i el 10 i que et digui després per pantalla la teva nota

Solució

[float] $nota = Read-Host "Entra un número del 0 al 10"
switch ($nota) {
{$_ -lt 5} {
    Write-Host "SUSPÈS" 
    }

{$_ -ge 5 -and $_ -lt 7} {
    Write-Host "APROVAT"
    }

{$_ -ge 7 -and $_ -lt 9} {
    Write-Host "NOTABLE"
    }

{$_ -ge 9 -and $_ -le 10} {
    Write-Host "EXCEL·LENT"
    }

default {
    Write-Host "Nota invàlida"
    }
}

Exercici 4

​Amb una estructura repetitiva fes la suma dels 25 primers números naturals

Solució

[int] $suma=0
[int] $num=1
while ($num -le 25) {
    $suma+=$num
    $num++
}
Write-Host "La suma dels 25 primers números naturals és $suma."

Exercici 5

​Amb una estructura repetitiva fes la taula de multiplicar d’un número demanat per pantalla

Solució

[int] $numero = Read-Host "De quin número vols saber-ne la taula de multiplicar?"
for ($i=0; $i -le 10; $i++) {
    $resultat=$numero*$i
    Write-Host "$numero x $i = $resultat"
}

Exercici 6

​Crea un cmdlet de powershell que mostri un menú a l’usuari amb cuatre operacions disponibles: crear directori, eliminar directori, mostrar directori i sortir. Una vegada escollida una opció correcta el programa ha de sol·licitar un nom de directori i fer la operació sel·leccionada.

Solució

[int] $opcio=0
while ($opcio -ne 4) {
    Write-Host "CMDLET Control de directoris"
    Write-Host "############################"
    Write-Host "1. Crear directori"
    Write-Host "2. Eliminar directori"
    Write-Host "3. Mostrar directori"
    Write-Host "4. Sortir"

    $opcio=Read-Host "Tria una opció:"

    switch($opcio){
    1 {
        Clear-Host
        $dir= Read-Host "Quin directori vols crear?"
        New-Item -ItemType directory -Path $dir
        }

    2 {
        Clear-Host
        $dir= Read-Host "Quin directori vols eliminar?"
        Remove-Item -Path $dir
        }

    3 {
        Clear-Host
        $dir= Read-Host "Quin directori vols veure?"
        Get-ChildItem $dir
        }

    4 {
        Clear-Host
        Write-Host "Fins aviat!"
        }

    default {
        Clear-Host
        Write-Host "Opció incorrecta"
        }
    
    }
    if ($opcio -ne 4){
    Read-Host "Pressiona qualsevol tecla per a continuar"
    Clear-Host
        }
}

Capítol 10: Variables amb múltiples valors

Exercici 1

​Crea un script de PowerShell que defineixi un array relacional HASH amb usuaris. Els camp de cada usuari han de ser nom_compte, nom_usuari i password. El programa ha de mantenir aquest array amb un menú en el que es pugui:

  • Afegir usuari
  • Eliminar usuari
  • Buscar per nom d’usuari
  • Mostrar tots els usuaris

Solució

[int] $opcio=0
$users = @{}

while ($opcio -ne 5) {
    Write-Host "CMDLET Control d'usuaris"
    Write-Host "############################"
    Write-Host "1. Afegir usuari"
    Write-Host "2. Eliminar usuari"
    Write-Host "3. Buscar usuari per nom"
    Write-Host "4. Mostrar tots els usuaris"
    Write-Host "5. Sortir"

    $opcio=Read-Host "Tria una opció:"

    switch($opcio){
    1 {
        Clear-Host
        Write-Host "AFEGIR USUARI"
        $nom_compte= Read-Host "Nom del compte"
        $nom_usuari= Read-Host "Nom de l'usuari"
        $password= Read-Host -AsSecureString "Contrasenya"

        #Fer hash de la contrasenya
        $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
        $utf8 = new-object -TypeName System.Text.UTF8Encoding
        $hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($password)))

        #Afegir valors
        $users.Add("$nom_compte", @("$nom_usuari", "$hash"))
        }

    2 {
        Clear-Host
        Write-Host "ELIMINAR USUARI"
        $nom_compte= Read-Host "Quin usuari vols eliminar?"
        $users.Remove("$nom_compte")
        }

    3 {
        Clear-Host
        Write-Host "CERCA USUARI"
        $nom_compte = Read-Host "Quin nom d'usuari vols veure?"
        Write-Host $users[$nom_compte]
        }

    4 {
        Clear-Host
        Write-Host "LLISTA TOTS ELS USUARIS"
        $users
        
        }

    5 {
        Clear-Host
        Write-Host "Fins aviat!"
        }

    default {
        Clear-Host
        Write-Host "Opció incorrecta"
        }
    
    }
    if ($opcio -ne 5){
    Read-Host "Pressiona qualsevol tecla per a continuar"
    Clear-Host
        }
}

Capítol 11: Funcions en PowerShell

Exercici 1

​Feu un script PowerShell que demani un caracter por pantalla i us digui després si és un número o una lletra. Aquest exercici s’ha de realitzar obligatòriament utilitzant una funció.

Solució

La manera de saber-ho és provar de fer un parsing del caràcter entrat cap a enter. Si la conversió és possible, serà un número; si no és possible fer el parsing, serà una lletra. La implementació amb funcions serà doncs:

function numeric_lletra($param){
    if (([System.Int32]::TryParse($param, [ref] 0))){
        Write-Host "És un número"
    }else{
        Write-Host "És una lletra"
    }
}

$caracter=Read-Host "Escriu un caràcter"
numeric_lletra($caracter)

Capítol 12: Exercicis varis en PowerShell

Exercici 1

Crear un arxiu de text anomenat exercici1.txt en el directori PRACTICA1 que hauràs creat prèviament

Solució

New-Item -ItemType file exercici1.txt

Exercici 2

Renombra l’arxiu creat anteriorment a exercici2.txt i mou-lo al directori POWERSHELL

Solució

Rename-Item exercici1.txt exercici2.txt

Exercici 3

​Crear un altre arxiu de text anomenat exercici3.txt que contingui el text

Hola, he creat un arxiu

al directori PRACTICA1

Solució

New-Item -ItemType file exercici3.txt
Set-Content -Path exercici3.txt -Value "Hola, he creat un arxiu"

Exercici 4

​Afegir el text Hola, una altra línia a l’arxiu exercici3.txt creat anteriorment

Solució

Add-Content -Path exercici3.txt -Value "'r'nHola, una altra línia" #Els valors <code>'r'n</code> són els que generen el retorn de carro i la línia nova respectivament

Exercici 5

Esborrar l’arxiu exercici3.txt demanant confirmació

Solució

Remove-Item -Path exercici3.txt -Confirm:$true

Exercici 6

Feu un script que creï un arxiu LLISTAT.TXT on hi haurà la llista de tots els arxius .EXE de la unitat C: del vostre sistema

Solució

Get-ChildItem -Path C:\ -Recurse -Depth 2 -Filter "*.exe" | Format-List Name | Out-File -FilePath LLISTAT.TXT

Exercici 7

​Presentar en 4 columnes el nom del arxius de C:\Windows que comencin per A o per E, inclosos els seus subdirectoris

Solució

Get-ChildItem -Path C:\Windows -File -Recurse -Depth 1 | Where {$_.Name -Like "a*" -or $_.Name -Like "a*"} | Format-Table -Wrap

Exercici 8

Feu un script que faci les següents tasques seqüencialment:

  1. Mostri els serveis de Windows
  2. Aturi el servei d’AUDIO demanant confirmació
  3. Mostrar els serveis de Windows en mode PowerShell
  4. Mostri els serveis de Windows en mode gràfic
  5. Arrenqui el servei d’AUDIO en mode DEBUG

Entre cada punt hi haurà una pausa de 3 segons

Solució

function retard($segons){
    Start-Sleep -Seconds $segons
}

#Llistar serveis com en CMD, suposo.
net start
retard(3)

#Per defecte no demana confirmació a no ser que defineixi -Confirm com a true
Stop-Service AudioSrv -Confirm:$true 
retard(3)

#Mostrar els serveis en "mode powershell"? Quina diferència hi ha entre el punt 1 i el punt 3? Bastanta ambigüitat.
Get-Service
retard(3)

Start-Process -FilePath "C:\Windows\System32\services.msc"
retard(3)

#Per defecte demana confirmació a no ser que defineixi -Confirm com a false
Start-Service AudioSrv -Debug -Confirm:$false