PowerShell
PowerShell és el nou intèrpret de comandes que substitueix al ja obsolet MS-DOS. Per a utilitzar Powershell hem d'executar l'aplicació amb aquest nom. Podem executar la comanda des de la consola MS-DOS o bé directament des de l'entorn gràfic.
Gestió d'arxius i carpetes amb PowerShell
Amb l'intèrpret de comandes PowerShell podem realitzar diferents funcions relacionades amb fitxers i carpetes: llistar els fitxers continguts en una carpeta, copiar fitxers o carpetes, esborrar fitxers o carpetes ... Per a realitzar aquestes operacions ens podem ajudar de caràcters comodins. Aquests tipus de caràcters ens permeten realitzar una mateixa operació en diferents arxius o carpetes a la vegada. Així, per exemple, enlloc de copiar els fitxers 1 a 1, amb l'ajuda dels caràcters comodins podem copiar varis fitxers a la vegada.
Caràcters comodins
Els caràcters comodins ens permeten realitzar una mateixa operació en diferents arxius o carpetes a la vegada. Així, per exemple, enlloc de copiar els fitxers 1 a 1, amb l'ajuda dels caràcters comodins, podem copiar varis fitxers a la vegada. En tots els sistemes informàtics, no només en els sistemes Windows, disposem de dos tipus de caràcters comodins: el caràcter asterisc "*" i el caràcter "?".
Caràcter "*"
Utilitzem el caràcter "*" quan no sabem quants caràcters tindran els fitxers o carpetes sobre la qual volem actuar.
Per exemple, l'expressió *.txt amb seleccionarà tots els fitxers que acabin amb ".txt", independentment del número de caràcters que tingui el fitxer. Cal tenir en compte que el caràcter *.txt pot ser que no substitueixi a cap caràcter. Així, per exemple, l'expresió t*.txt, amb seleccionarà tots els fitxers que comencin per "t" i acabin amb ".txt". El fitxer t.txt també compleix amb l'expresió t*.txt, ja que el caràcter comodí * també és valid per a substituir 0 caràcters.
Exemples caràcter comodí *
L'expressió i*.txt iguala amb les cadenes de caràcter:
i.txt (cas conjunt buit, on no substitueix a cap caràcter) import.txt (\ substitueix la cadena de caràcters mport) io.txt (* substitueix el caràcter o)
L'expressió i*.txt NO iguala amb les cadenes de caràcter:
ai.txt (no comença per i) ia.txt1 (no acaba amb txt) i.text (no acaba amb txt)
L'expressió *.txt* iguala amb les cadenes de caràcter:
.txt (cas conjunt buit pels dos caràcters comodins *) ab.txt (el primer caràcter comodí es substitueix per ab. El segon caràcter comodí pel conjunt buit (zero caràcters))
import.txt.zip (el primer comodí es substitueix per import, mentre que el segon caràcter comodí per .zip)
L'expressió *.txt* NO iguala amb les cadenes de caràcter:
importtxt.zip (el nom del fixer no conté la cadena de caracters .txt)
import.text.zip (el nom del fixer no conté la cadena de caracters .txt)
L'expressió * iguala amb qualsevol nom ja que accepta el conjunt buit o qualsevol conjunt de caràcters.
Caràcter "?"
Utilitzem el caràcter comodí "?" quan volem substituir a un caràcter o bé volem indicar que aques caràcter és opcional: el caràcter comodí "?" és substituit per zero caràcters.
Per exemple, l'expressió instr?.txt amb seleccionarà tots els fitxers que comencin per instr i acabin amb ".txt". Com que el caràcter comodí "?" pot ser substituit per un o zero caràcters, tots els arxius que tinguin una longitud de 10 caràcters (instru.txt, instr1.txt, instrf.txt, ...) i l'arxiu instr.txt compleixen amb l'expressió regular instr?.txt.
Exemples
L'expressió i?.txt iguala amb les cadenes de caràcter:
i.txt (cas conjunt buit, on ? no substitueix a cap caràcter) im.txt (? substitueix al caràcter "m")
L'expressió i?.txt NO iguala amb les cadenes de caràcter:
ai.txt (no comença per i) iab.txt (el caràcter comodí pot substituir només a un caràcter , en aquest cas substituiria la lletra "a" però la lletra "b" no té quivalència en l'expressió i?.txt) ia.txt1 (no acaba amb txt) i.text (no acaba amb txt)
L'expressió ?.t?xt iguala amb les cadenes de caràcter:
.txt (cas conjunt buit pels dos caràcters comodins ?) a.txt (el primer caràcter comodí es substitueix per la lletra "a". El segon caràcter comodí pel conjunt buit (zero caràcters)) i.text (el primer comodí es substitueix per "i", mentre que el segon caràcter comodí per "e")
L'expressió ?.t?xt NO iguala amb les cadenes de caràcter:
itext (el nom del fixer no conté el caràcter "." que és obligatori per l'expressió .t?xt)
i.texte (NO acaba amb xt) ab.txt (El caràcter comodí només pot substituir a un caràcter).
L'expressió ? iguala amb qualsevol nom que contingui un únic caràcter o sigui buit.
Llistat contingut carpeta - comanda ls
Per a veure tots els arxius i carpetes dins de la carpeta on estem ubicats hem d'executar la comanda "ls" o bé "dir" . La comanda dir és també compatible amb MS-DOS.
La comanda ls funciona només per a PowerShell però és una comanda que també existeix en sistemes Linux i Windows.
La primera col·lumna que ens retorna la imatge és el Mode . Alguns dels valors més comuns per a la col·lumna Mode són:
- a : arxiu
- d : directori o carpeta
- r : (read) només es permet la lectura
- h : (hidden) directori o arxiu ocult
- s : (system) fitxer de sistema operatiu
Per a visualitzar els fitxers ocults del sistema hem d'utilitzar la comanda ls amb el modificador -force . Aquest modificador obliga a la comanda ls a mostrar tots els arxius i directoris independentment de si estan ocults o visibles.
La comanda ls , si no inclou més informació, mostra sempre la informació de la carpeta on estem ubicats. Si vull veure la informació ubicada en una altra carpeta haig d'indicar on està ubicada aquesta carpeta. Per a indicar l'ubicació hi ha 2 maneres: utilitzant una ruta absoluta o una ruta relativa.
En la imatge podem observar que l'unitat sobre la que s'està treballant és la unitat D. Per a canviar a una unitat diferent utilitzant PowerShell cal executar la comanda "nomunitat:", on nomunitat és la lletra associada a l'unitat a la qual volem accedir. Així, per exemple, si vull accedir a l'unitat referenciada amb la lletra C executaré la comanda
C:
Observem com després de canviar d'unitat hem accedit a l'última ubicació en aquest cas la carpeta Downloads associada a l'usuari "miquel".
Aplicació caràcters comodins amb comanda ls
La forma d'utilitzar els caràcters comodins amb la comanda ls és utilitzant el modificador -FILTER. Així, per exemple, si volem obtenir tots els fitxers que tenen l'extensió .txt podem utilitzar l'expressió
ls -Filter *.txt c:\windows # on C:\Windows és la carpeta on volem buscar
LListat recursiu
Si heu vist la pel·lícula "Inception" recordareu que els protagonistes viuen un sòn dins un sòn. Aquest segon sòn també conté un altre sòn que a la vegada contindrà un altre sòn i així recursivament unes quantes vegades més. El que necessitem amb les carpetes és una cosa semblant: poder buscar dins una carpeta i dins les carpetes que contingui. Si el contingut d'una carpeta és una altre o més carpetes, també caldrà buscar dins aquestes i així recursivament fins a que no hi hagi més carpetes per examinar. Podem utilitzar el modificador -Recurse o -R per a buscar recursivament dins una carpeta. Així, per exemple, l'expressió:
ls -Recurse -Filter *.txt c:\windows # on C:\Windows és la carpeta on volem buscar
Buscarà tots els fitxers amb l'extensió .txt dins de Windows i dins de totes les carpetes contingudes dins de Windows. Al final ens retornarà tots els fitxers amb l'extensió .txt continguts dins de l'arbre de directoris de la carpeta c:\Windows.
Podem abreviar el modificar -Recurse per -R o -r , ja que PowerShell i Windows no diferencia entre els caràcters majúscula i minúscula. Les següents comandes són equivalents a l'expressió anterior
ls -R -Filter *.txt c:\windows # on C:\Windows és la carpeta on volem buscar
ls -r -Filter *.txt c:\windows # on C:\Windows és la carpeta on volem buscar
Directoris
Directori és una paraula tècnica que utilitzem per a referir-nos a una carpeta.
Canviar de directori
Per a canviar de carpeta utilitzant Powershell o MS-DOS utilitzem la comanda cd seguida de la ruta absoluta o relativa per accedir a la carpeta desitjada.
cd rutaCarpeta
cd c:\Windows
Per exemple, la comanda anterior ens ubicaria a la carpeta Windows dins la unitat c:. Aquesta comanda només s'executarà correctament si el directori "Windows" existeix i està a l'arrel de la unitat "C"
NOTA: La comanda cd no té sentit amb fitxers!! Per tant, després de la instrucció cd només es podran incloure noms de carpeta.
Per a especificar un arxiu o una carpeta sempre podem utilitzar rutes absolutes o relatives. El problema de les rutes absolutes és que poden ser molt llargues i a més, si canvia l'estructura deixa de funcionar. Per exemple, si estic ubicat en la carpeta M5 i vull referenciar a la carpeta Foreign utilitzant ruta relativa utilitzaré l'expressió: UF1\Foreign. En canvi , si utilitzo ruta relativa, l'expressió seria "D:\M5\UF1\Foreign" . Si es mou tota l'estructura de carpetes de l'unitat D a una altra unitat, per exemple la C, la ruta relativa continuarà funcionant. En canvi, la ruta absoluta és totalment invàlida ja que buscarà la carpeta en la unitat D!
Directoris especials
El sistema operatiu Windows, també els sistemes Linux incorporen directoris amb un propòsit específic. Aquests directoris reben el nom de . i .. . Per a veure aquests directoris hem d'executar la comanda 'dir' en un intèrpret de MS-DOS, tal i com es veu en la imatge
Directori "."
El directori punt fa referència al directori actual. Així, per exemple, la comanda "cd ." no té cap efecte, ja que indica al sistema que es vol accedir a la carpeta actual , en la qual ja estem ubicats !!!
Una altra utilització del directori "." és en les rutes relatives. Així, les comandes:
cd .\Windows
i
cd Windows
Directori ".."
El directori ".." és important ja que ens dóna accés al directori pare de la carpeta on estem ubicats. Per exemple, si la de imatge següent
l'ubicació és en la carpeta Foreign amb la comanda
cd ..
accediré a la carpeta UF1, que és la carpeta pare de Foreign.
Per a retrocedir dos directoris hauré d'utilitzar dos vegades ".." separats pel separador de directoris "/".
cd ..\..
Gestió de directoris
La gestió de carpetes inclou les operacions bàsiques que podem fer amb una carpeta. Aquestes operacions inclouen: creació, eliminació, canvi de nom, moure i còpia.
Crear
Per a crear carpetes utilitzem la comanda mkdir i a continuació la ruta amb el nom de la carpeta que volem crear. Així, per exemple, la comanda
mkdir exemple
Crea la carpeta exemple en la carpeta actual. Aquesta comanda donarà un error si la carpeta exemple ja existeix en la ubicació actual.
mkdir exemple1/exemple1.1
La comanda anterior crearà la carpeta exemple1 i exemple1.1 . Si la carpeta exemple1 ja existeix abans de l'execució de la comanda es crearà només la carpeta exemple1.1 dins la carpeta exemple1.
Eliminar
Per a eliminar carpetes utilitzem la comanda rm i a continuació la ruta amb el nom de la carpeta que volem eliminar. Així, per exemple, la comanda
rm exemple
Elimina la carpeta exemple ubicada en el directori actual. Aquesta comanda donarà un error si la carpeta exemple no existeix en la ubicació actual.
rm exemple1/exemple1.1
La comanda anterior elimina la carpeta exemple1.1 que ha d'estar dins la carpeta exemple1.
Si volem borrar una carpeta que conté altres carpetes hem d'utilitzar el modificador -r (recursiu). Per exemple, si volem borrar la carpeta exemple1 que conté altres carpetes , cal executar la instrucció:
rm -r exemple1
Moure
Per a moure carpetes utilitzem la paraula clau "mv". "mv" és un àlies de "move-item". Moure una carpeta consisteix en copiar una carpeta en una ubicació diferent a l'actual eliminant la carpeta de l'úbicació inicial.
El format de la instrucció és:
mv "NomCarpeta o Fitxer a moure" "Carpeta desti o nom fitxer destí"
La comanda "mv" presenta una sèrie de limitacions. Aquesta comanda només funciona si el directori origen i el directori desti estan en la mateixa unitat. Així, per exemple, si volem moure una carpeta del disc dur al nostre pen, aquesta operació no serà permesa (sí que està permesa la còpia de fitxers entre diferents unitats)
La comanda 'mv' també es pot utilitzar per a renombrar una carpeta. L'única cosa que cal fer és indicar el nom del directori com a origen i com a destí el nou nom de la carpeta.
Copiar
L'operació de còpia és molt semblant a l'operació de moure, però en aquest cas es té un duplicat de la carpeta copiada. Utilitzem l'operació de còpia quan volem fer una còpia de seguretat d'un directori o d'una unitat.
Cal tenir en compte que si la carpeta que volem copiar conté directoris és necessari utilitzar el modificar -R o -Recurse per tal que les carpetes també es copiin.
La comanda que utilitzem és cp , àlies de copy-item . El format bàsic d'aquesta comanda és:
cp [-R | -Recurse] "NomCarpeta o Fitxer a copiar" "Carpeta desti o nom fitxer destí"
Utilitzem el símbol [] per a indicar opcionalitat. Utilitzem el símbol | per a indicar que es pot escollir entre dues opcions. Per tant, podem utilitzar -R o -Recurse tot i que aquest paràmetre en alguns casos no serà necessari: quan només es copïin fitxers.
També puc utilitzar la comanda cp per a canviar el nom de la carpeta (o fitxer si estem copiant un fitxer) en la carpeta de destí.
La comanda cp , a diferència de la comanda mv, sí que permet la còpia entre diferents volums de discos o de dades. Haurem d'utilitzar aquesta comanda per a copiar o moure directoris, per exemple, entre el nostre disc i un usb o un altre disc extern.
Gestió de fitxers
Atributs i permissos
Cal tenir en compte que els atributs i els permissos d'un objecte (directori, fitxer...) són coses diferents. Els permissos estan en relació a un usuari o grup d'usuaris i poden ser diferents per a diferents usuaris. Els atributs són per a tots els usuaris del sistema. Així, per exemple, si activo l'atribut de només lectura, cap usuari podrà escriure en el fitxer (si s'aplica aquest permís a una carpeta només afectarà als fitxers continguts dins la carpeta). Els principals atributs que es poden associar a un objecte són
- d: es tracta d'una carpeta (directori)
- a: l'arxiu està marcat conforme cal fer còpia de seguretat del mateix. Si l'arxiu té l'atribut "a" , vol dir que s'ha modificat des de l'última còpia i, per tant, que cal fer còpia d'aquest arxiu. En cas contrari, l'arxiu ja es va copiar anteriorment i, per tant, no cal fer-ne una nova còpia.
- h: el fitxer o carpeta és ocult
- r: l'arxiu és de només lectura.
- s: es tracta d'un fitxer de sistema. El fet que sigui un fitxer de sistema condiciona a que aquest fitxer sigui de només lectura, però a diferència del read-only atribut, el fet que sigui de sistema dóna al fitxer o a la carpeta una major importància.
Com obtenir els atributs associats a un objecte
Els atributs d'un objecte es mostren quan executem la comanda ls . Es tracta de la columna etiquetada amb el nom de mode.
Canviar atributs objecte
Per a canviar l'atribut d'un fitxer o d'una carpeta utilitzem la comanda de Powershell Set-ItemProperty . En aquesta comanda sempre haurem d'especificar l'arxiu o carpeta a la qual volem canviar l'atribut. Ho fem mitjançant el modificador -Path . Donat que sempre canviarem l'atribut, sempre haurem d'utilitzar la instrucció:
Set-ItemProperty -Path directori/fitxer -Name attributes -Value ([IO.FileAttributes]::ValorAtribut)
De la instrucció anterior només hem de canviar la part que es mostra en cursiva: el fitxer o la carpeta sobre la qual volemm aplicar el nou valor de l'atribut i el valor de l'atribut que volem assignar. Si després dels "::" polsem la tecla tab (tabulador), el sistema ens enumerarà els diferents valors possibles associats als atributs.
La imatge podem veure l'utilització del modificador -force per a visualitzar el contingut ocult en el sistema.
Funcionament atribut "archive"
En la següent imatge s'elimina l'atribut "archive" associat al fitxer. Quan modifiquem el fitxer, observem que aquest atribut es torna a aplicar.
D'aquesta forma el sistema sap que ha de fer una còpia de seguretat del fitxer.
Obtenir permissos fitxer o directori
L'obtenció dels permissos associats a un fitxer o a un directori utilitzant Powershell és un sistema més complexe, ja que cal accedir a diferents tipus d'informació de forma gradual. En la imatge es mostra com obtenir els permissos per a una carpeta o un fitxer. Observem com el llistat ens mostra els permissos i a continuació a quin usuari o grup d'usuaris s'apliquen aquests permissos. Observem com els permissos, pel grup Administrators i l'usuari System es donen de forma textual i en format numèric.
En la següent imatge es mostra el procés detallat de què fa cada una de les instruccions exposades en la comanda anterior
Obtenir una referència al fitxer o carpeta. Guardem aquesta referència al fitxer o carpeta amb el nom de $file. Podem utilitzar aquest nom per a referenciar al fitxer o carpeta prèviament llegit.
Obtenim la informació de control associada al fitxer o directori prèviament llegit.
Finalment, guardem la informació de control relacionada amb l'accés al fitxer o carpeta en una nova variable $acces . Utilitzem la comanda select per a seleccionar quina informació interessa mostrar i format-list per a indicar quin format de visualització es vol aplicar.
Crear un fitxer
Per a crear un fitxer hi ha múltiples sistemes. Des de l'utilització de la comanda New-item a utilitzar el redireccionament. Cada un dels mètodes té un propòsit específic. Amb la comanda New-Item , si volem crear arxius o directoris són precisos dos arguments:
- -ItemType : File si volem crear un fitxer, Directory si volem crear un directori
- -Path: ruta absoluta o relativa amb el nom de la carpeta o fitxer a crear
El format comple de la comanda seria:
new-item -ItemType File | Directory -Path nom fitxer o directori
Les parts en cursiva és la informació variable que haurem d'adaptar al problema.
La primera comanda de la imatge anterior crea un arxiu de nom newFile.txt en la carpeta M5. La segona comanda crea un directory de nom newDirectory dins la carpeta M5
Redireccionament de sortida
El redireccionament consisteix en modificar la sortida estàndar d'una comanda , normalment la pantalla, per a un fitxer. Així, per exemple, en la imatge següent
Links
Un link és un fitxer que fa referència a un altre fitxer. Quan accedim a un fitxer de link realment estem accedint al fitxer original, fitxer al qual fa referència el link. Els links són molt útils quan volem fer certs fitxers accessibles a l'usuari però no volem duplicar el fitxer, amb l'estalvi de memòria que aquest fet suposa.
Utilitzem la comanda New-Item i especifiquem com a tipus d'element (-ItemType) SymbolicLink. Aquest tipus d'element només no està disponible per a la versió 2 de PowerShell. Per aquest motiu, abans de poder crear enllaços en PowerShell serà necessari migrar a una versió posterior. En el següent video es mostra com poder migrar PowerShell de la versió 2 a la versió 5.
Video: Actualtizar versió de Powershell
El format que utilitzarem per a crear enllaços és:
New-Item -ItemType symbolicLink -name fitxer.lnk -target referència
En aquest cas, fitxer.lnk és el nou fitxer accés directe que volem crear. referència és el fitxer o directori que tindrà associat el fitxer.lnk
Amb la comanda new-item podem crear un enllaç a una carpeta. En aquest cas , la referència serà el directori sobre el qual es vol fer l'accés directe.
Amb el modificador -Path podem indicar on volem que s'emmagatzemi l'enllaç al fitxer o a la carpeta.
Creació de programes o scripts amb PowerShell
Per a crear un script amb Powershel hem de crear un fitxer amb l'extensió .ps1. En aquest fitxer cal incloure totes les comandes que volem que s'executin per l'ordre en què s'han d'executar. Per a executar el nostre script , hem d'utilitzar l'expressió: .\ seguit del nom que hem assignat al script.
.\script.ps1
El codi anterior executa totes les instruccions incloses en el fitxer d'script script.ps1. El problema és que per defecte el sistema no deixa executar scripts.
Per a resoldre aquest problema hem de:
1r. Executar l'intèrpret de programes Powershell com a administrador. 2n. Executar la comanda: set-executionPolicy unrestricted