PowerShell: una guida completa – parte 1a

Rispondi
Avatar utente
openresource
Administrator
Administrator
Messaggi: 382
Iscritto il: mar gen 28, 2020 9:52 pm
Reactions score: 4
Località: varese
Contatta:
mag 2020 19 05:35

PowerShell: una guida completa – parte 1a

Messaggio da openresource

Windows PowerShell è un argomento piuttosto vasto, l’obiettivo di questa guida è fornire agli amministratori di sistema uno strumento semplice e utile per comprendere i fondamentali di PowerShell. Dimostreremo anche alcuni script e comandi che potranno essere utilizzati nelle comuni attività giornaliere. Questa guida vi consentirà di muovere i primi passi, insegnandovi le skill di base richieste per adottare PowerShell e lo scripting orientato a oggetti.
Cos’è PowerShell?
Windows PowerShell è una shell in linea di comando, un linguaggio di scripting e un framework per l’automazione di task creata da Microsoft. E’ basata sul framework .NET ed è perfetta per automare batch e task di sistema. PowerShell è disponibile per Windows e Linux ed è stata integrata nei sistemi operativi Microsoft fin da Windows Server 2003 R2. Oggi PowerShell è installata di default su tutti i sistemi Windows Server e tutte le edizioni professional dei sistemi desktop della casa. Inoltre, puoi scaricarla direttamente dal sito Microsoft se necessario.
PowerShell non è un linguaggio di programmazione compilato come C, è un linguaggio di scripting, cioè interpretato. Dispone di un set di comandi (cmdlet) che possono essere eseguiti dall’utente su un ampio range di diverse variabili. Questo è estremamente utile per interrogare ed eseguire comandi su un intero datacenter di server in un’unica soluzione. PowerShell include anche l’esecuzione in linea di comando, puoi lanciare qualsiasi comando Windows e si comporterà come il Prompt dei Comandi.
Come aggiornare o installare PowerShell?
Prima di iniziare, raccomandiamo di utilizzare la più recente versione di PowerShell (5.0 o superiore). Con ogni nuova release, Microsoft aggiunge nuove funzionalità e cmdlet: PowerShell è un linguaggio di scripting in evoluzione con nuove funzioni che vengono aggiunte per consentire una migliore integrazione.
Windows PowerShell include le applicazioni Core Shell e PowerShell ISE (Integrated scripting environment). Queste possono essere trovate dal menu Start semplicemente digitando PowerShell. Suggeriamo di lanciare sempre PowerShell come amministratore.
Immagine
Se devi aggiornare la tua versione di Powershell, segui la prima parte di questo articolo (solo i punti da 1 a 10).
Puoi verificare la versione aprendo la Shell e digitando $psversiontable -cerca la proprietà PSVersion
Immagine
Le basi di PowerShell e Get-Help
Uno dei primi concetti da apprendere di PowerShell è il sistema di aiuto. PowerShell è stata progettata per essere semplice da usare ed ogni cmdlet include della documentazione di aiuto dettagliata su come utilizzarlo.
Il file di aiuto contiene la descrizione del comando, la sintassi da utilizzare e anche un esempio d’uso.
La comunità di PowerShell ha abbracciato questo approccio informativo e la grande maggioranza degli script disponibili online hanno file d’aiuto dettagliati. E’ importante abituarsi a controllare sempre il file d’aiuto, anche se non si è “bloccati”. Scoprirai molte cose nuove sui cmdlet e modalità d’uso che probabilmente ignoravi.

  • Per prima cosa dovresti aggiornare i file di help da Microsoft digitando update-help – questo comando dirà a PowerShell di scaricare da Internet tutti gli help aggiornati. Va eseguito una sola volta.

  • Ora digitate Get-Command – verrà presentata una lista di tutti i comandi disponibili. (PowerShell Tip – la grammatica dei comandi è sempre al singolare: Log non Logs; Service non Services)

  • Quasi tutti i file di aiuto includono degli esempi – Con il comando get-help get-service -examples potrai consultarli. Questo è il modo migliore per imparare ad utilizzare i primi cmdlet.

Immagine

  • Sopra puoi vedere il file help di get-service, con le quattro aree chiave sono state evidenziate

    • SYNOPSIS – Cosa il comando fa

    • SYNTAX – Come utilizzare il comando per farne cmdlet

    • RELATED LINKS – I comandi simili o correlati, nell’esempio, troviamo comandi con cui get-service può interagire nella pipeline.

    • REMARKS – Come ottenere maggiori informazioni sul comando.

Set-ExecutionPolicy
Le policy di esecuzione sono un elemento di sicurezza di PowerShell e determinano la possibilità dell’utente di eseguire determinati comandi e/o caricare la configurazione di file. Se configurate erroneamente, le policy ti impediranno di eseguire tutti gli script disponibili nella tua versione di PowerShell. Questo apparirà chiaramente nel momento in cui utilizzerai script scaricati dal web.
Puoi configurare le policy in diversi modi, la più comune è semplicemente consentire l’esecuzione di tutti gli script, o se preferisci, puoi semplicemente disabilitare le security policy. Il secondo sistema non è una best practice, ma è estremamente utile per fare pratica ed eseguire test di laboratorio.

  1. Per abilitare l’esecuzione di script remoti digita set-executionpolicy remotesigned

  2. Per disabilitare le policy digita Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Usate la seconda opzione con cautela e mai in un ambiente di produzione.
 
Cos’è la Pipeline?
La pipeline viene utilizzata per importare, esportare e convertire dati in un comando Windows PowerShell. Per utilizzarla a dovere, è importante pensare sempre a cosa è presente nella pipeline mentre si esegue il comando. Chi ha esperienza con Linux troverà più semplice dominare il concetto. Ogni volta che esegui un comando PowerShell, il risultato (o dato) viene passato “a valle” nella pipeline. I dati risultanti possono essere utilizzati per eseguire ulteriori comandi, a cascata.
Nota – I comandi sono separati usando il simbolo pipe “|”.
Immagine
Il modo più semplice per spiegarlo è provare un semplice comando, ad esempio get-process | stop process
Il risultato del Comando A (get-process) viene passato a valle della pipeline al Comando B (stop-process) che viene a sua volta passato all’Output. Puoi quindi manipolare il Comando A per passare a valle dei risultati specifici. Puoi anche aggiungere ulteriori “passaggi”, usando le pipe, per ottenere cmdlet granulari.
I fondamentali Powershell
Windows PowerShell è una shell orientata a oggetti, ogni cmdlet è una collezioni di oggetti ed ogni oggetto ha le sue proprietà. Questo può essere dimostrato utilizzando il comando get-member. Potete inserire il comando get-member nella pipeline, come ad esempio get-service | get-member. 
Al fine di comprendere meglio, digita get-service nella shell
 
Immagine
Vedrai le informazioni su ogni servizio del tuo sistema, incluso status, name ed displayname. Ma sono presenti molte altre proprietà per l’oggetto get-service che qui non stiamo visualizzando.
Ora digita get-service | get-member
Il risultato comprenderà gli oggetti applicabili al dataset Get-Service, che includono Alias, Methods e property.
 
Immagine
Puoi ora utilizzare le informazioni da Get-Member per costruire i tuoi comandi.
Digita get-service | Select-object Name, startype, status
Immagine
Saranno mostrate informazioni riguardo ai servizi di sistema, questa volta con Name, Starttype e Status.
Possiamo spingerci ancora oltre introducendo sorting (ordinamento), grouping (raggruppamento) e measuring (misurazione).
Digita get-service | Select-Object Name, Starttype, status | sort-object StartType
I risultati saranno ordinati per Starttype. (di default alfanumerico)
Immagine
Ora digita get-service | Select-object Name, StartType, Status | Group-Object -property Status
I servizi saranno raggruppati per Running, Stopped o se applicabile disabled. Saranno anche conteggiati e il valore viene riportato fra le parentesi {}.
Immagine
Infine, digita Get-service | Where-object status -eq “Running” | Measure-object
Immagine
Questo comando cercherà unicamente i servizi in esecuzione (Running) e li conterà. Nel nostro esempio abbiamo 80 servizi in esecuzione.
 
In questa prima parte abbiamo mosso i primi passi nel mondo di Windows PowerShell. E’ importante ricordare i fondamentali introdotti qui. Nella seconda parte introdurremo l’importazione dei dati e l’esportazione di dati.

Importare dati in PowerShell
PowerShell supporta un grande numero di data format che possono essere importati. Questo consente agli amministratori di eseguire comandi sui dati inseriti. Ci sono due comandi chiave da imparare ad utilizzare, Get-Content e Import-csv. Il cmdlet Get-Content acquisisce il contenuto di un oggetto in una specifica location, solitamente testo o una stringa. Import-Csv crea un oggetto custom simil-tabella che utilizza dati e intestazioni presi da un file csv. Puoi ottenere maggiori informazioni digitando get-help get-content -full e get-help import-csv -full
Per dimostrare queste funzionalità utilizzeremo il nostro laboratorio di test The Solving 2012 R2. Abbiamo creato un file di testo con gli hostname dei server e lo abbiamo salvato nel percorso C:\Temp\Test.txt
Immagine
Digita Get-Content C:\TEMP\Test.txt  – Powershell importerà il contenuto.
Immagine
Ora che abbiamo i dati nella Shell possiamo iniziare ad utilizzarli.
Digita Get-Content C:\Temp\test.txt | ForEach-Object {Get-WMIObject -class win32_processor} | FT – Autosize
Immagine
Questo comando restituisce i dettagli della CPU dei server in test.txt. Il comando introduce diversi concetti chiave per comprendere l’importazione dati in Powershell:

  • Il comando Get-WMIObject -class win32_processor raccoglie le informazioni della CPU.

  • Il cmdlet ForEach-Object applicherà il comando Get-WMIObject ad ogni hostname nella lista test.txt.

  • Le parentesi { } che racchiudono il comando {Get-WMIObject -class win32_processor} informano PowerShell di far girare Get-WMIObject -class win32_processor per ogni linea di testo C:\Temp\test.txt.

  • La parte finale | FT -Autosize introduce la restituzione dei dati (output) di PowerShell, FT è un alias di Format-Table mentre il parametro -autosize fa in modo che la shell mostri le informazioni in modo leggibile.

Come sempre, possiamo spingerci anche oltre. Il risultato di cui sopra potrebbe non contenere tutte le informazioni di cui abbiamo bisogno sui processori.
Digita Get-content C:\TEMP\test.txt | ForEach-Object {Get-WmiObject -class win32_processor} | Get-member
 
Immagine
Puoi ora modificare il comando alla ricerca di specifiche informazioni di cui necessiti.
Ad esempio Get-content C:\TEMP\test.txt | ForEach-Object {Get-WmiObject -class win32_processor} | Select-Object Name, socketdesignation, numberofcores, number
oflogicalprocessors, L2cachesize, l3cachesize | Format-table -AutoSize
Immagine
Esportare dati da PowerShell
Abbiamo già visto brevemente come visualizzare i dati da PowerShell utilizzando il cmdlet Format-Table. Sono disponibili molti altri formati fra cui i più utilizzati sono:

  • Format-List – Il formato di default di PowerShell, per l’output della pipeline. Ecco un esempio:

Digita Get-content C:\TEMP\test.txt | ForEach-Object {Get-WmiObject -class win32_processor} | Select-Object Name, socketdesignation, numberofcores, number
oflogicalprocessors, L2cachesize, l3cachesize | Format-list
Immagine

  • Export-CSV – PowerShell può esportare i dati direttamente in CSV (Comma Separated Values) – un’ottima soluzione per un report.

Digita Get-content C:\TEMP\test.txt | ForEach-Object {Get-WmiObject -class win32_processor} | Select-Object Name, socketdesignation, numberofcores, number
oflogicalprocessors, L2cachesize, l3cachesize | Export-CSV C:\TEMP\Test.csv
Quindi apri il CSV file presente in C:\TEMP\Test.csv
Immagine

  • Convertto-HTML – Powershell può esportare i dati direttamente in HTML e puoi anche importare attributi CSS per report accattivanti graficamente.

Digita Get-content C:\TEMP\test.txt | ForEach-Object {Get-WmiObject -class win32_processor} | Select-Object Name, socketdesignation, numberofcores, number
oflogicalprocessors, L2cachesize, l3cachesize | ConvertTo-Html > C:\Temp\test.html
Immagine

  • Output Everything! – Puoi perfino chiedere a PowerShell di mostrate tutto ciò che è presente nella pipeline. Aggiungi semplicemente -property * al comando

Digita Get-content C:\TEMP\test.txt | ForEach-Object {Get-WmiObject -class win32_processor} | Format-List-Property *
Immagine
Nella terza parte di PowerShell: una guida completa introdurremo degli esempi pratici di script PowerShell per amministratori IT. Parliamo di soluzioni utili per operare con Active Directory, filesystem e molto altro.

 In questo articolo finale combineremo i concetti appresi finora e dimostreremo alcuni utilizzi pratici di PowerShell. La shell di Microsoft può rendere la vita di un amministratore IT molto più semplice, consentendo di gestire l’infrastruttura con poco sforzo. PowerShell è un tool potentissimo per semplificare il management dei server, raccogliere informazioni sugli stessi e mostrarle in differenti formati.
Questa parte finale della guida introdurrà diversi nuovi concetti. Prenditi il tuo tempo e affronta ogni parte individualmente.
Che software sono installati sul mio sistema?
Digita Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
Immagine
Il comando sopra mostrerà gli applicativi installati sul tuo sistema. Se scomponi i comandi noterai che la struttura è piuttosto complessa:

  • Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*  – Questa parte del comando ordina a PowerShell di cercare in HKLM e navigare al percorso \Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall per raccogliere tutte le proprietà presenti. HKLM è il filesystem PowerShell per il registro!

  • Il resto del comando raccoglie semplicemente dei dati specifici (DisplayName, DisplayVersion, Publisher, InstallDate) e li riproduce in una tabella.

Inoltre, puoi navigare per il registro direttamente dalla shell digitando cd HKLM:\ e quindi spostandoti per HKLM come col Command Prompt fra le cartelle di Windows.
Che aggiornamenti di Windows sono installati sul mio sistema?
Trovare informazioni sugli hotfix e gli aggiornamenti (KB) era molto complesso con PowerShell. Microsoft ha di recente introdotto il cmdlet Get-Hotfix: un potente strumento per interrogare l’infrastruttura e scoprire quali patch e aggiornamenti di Windows Update sono installati o per verificare se uno specifico hotfix è presente.
Pensate al caso in cui la scoperta di una vulnerabilità porti Microsoft a rilasciare una patch di sicurezza: per garantire la protezione dell’infrastruttura è fondamentale verificarne la presenza e in caso negativo installare la patch. Con questo cmdlet, una volta preparato lo script, basta qualche minuto per produrre una lista di server vulnerabili.
Digita Get-Hotfix | Format-table -autosize
Immagine
Questo produrrà una lista dei KB installati sul tuo sistema.
Ora possiamo sfruttare le potenzialità della shell di interfacciarsi con una pluralità di macchine. Per fare questo introdurremo il PowerShell ISE (integrated scripting environment).
Aprite PowerShell ISE e digitate quanto segue nel pannello degli script. Quindi premete il pulsante play Immagine per eseguire lo script. Avrete bisogno di un file di testo con i vostri server come quello creato nella parte 2 della guida. Come reminder, ecco il contenuto che avevamo creato:
Immagine
Ora digitate in PowerShell ISE:
$servers =  get-content c:\temp\test.txt
foreach ($server in $servers)
{Get-HotFix -ComputerName $server | Select-Object PSComputername, HOTFIXiD, Installedon  | Sort-Object -Property InstalledOn -Descending}
Immagine
Questo restituirà tutti i KB installati sui server The-Solving-N1, The-Solving-N2 and The-Solving-N3:
Immagine
Se devi verificare la presenza di uno specifico KB, per esempio KB2977629, devi aggiungere il cmdlet Where-object HotfixID -eq “KB2977629” allo script.
inserisci:
$servers =  get-content c:\temp\test.txt
foreach ($server in $servers)
{Get-HotFix -ComputerName $server | Where-object HotfixID -eq “KB2977629” | Select-Object PSComputername, HOTFIXiD, Installedon  | Sort-Object -Property InstalledOn -Descending}
Immagine
Come posso cercare gli errori nell’Event Log?
L’Event Log è uno strumento fondamentale per rilevare problemi di sistema. PowerShell può migliorare molto l’efficienza delle ricerche nel log.
digita Get-Eventlog system -Newest 30 | Where-Object {$.entryType -Match “Error”} | format-table -AutoSize
Immagine
Il comando appena mostrato cercherà nel log SYSTEM e mostrerà i 30 errori più recenti. Puoi facilmente cambiare l’Event Log con Application o Security.
PowerShell e Active Directory
PowerShell può interagire con qualsiasi sotto-sistema di Windows. Risulta particolarmente utile quando adottata per interrogare Active Directory. Di seguito trovi una selezione di script interessanti ma, prima di vederli, devi verificare la presenza del modulo Active Directory abilitato nella shell. Il modo più semplice è eseguire questi comandi sul domain controller, tuttavia, qualora non fosse possibile, puoi anche aggiungere il ruolo al tuo sistema che deve però far parte del dominio dal quale vuoi estrarre le informazioni.
Digita Add-WindowsFeature RSAT-AD-PowerShell
Immagine
Immagine
Completata l’installazione puoi usare la shell per raccogliere informazioni e modificare il dominio Active Directory. Procedi con cautela nel caso tu stia lavorando su un ambiente di produzione.
Dato che la lista di comandi è piuttosto vasta, abbiamo raggruppato per categoria i cmdlets che reputiamo più utili. Puoi sempre lanciare il comando get-help per approfondire nel dettaglio questi cmdlet.
Query Utente
Interrogare gli account utente è molto semplice in PowerShell. I commandi nella tabella di seguito spiegano come cercare degli utenti, individuare quelli con password non-compliant, lock-out, disabilitati e via dicendo.

PowerShell Command

What is does

Category

Get-ADUser -Filter * -Properties * | where { $_.whenCreated -ge $week } | select Name,whenCreated | Sort Name

Utenti creati nell’ultima settimana, ordinati per nome

USERS

Get-ADUser -Filter * -Properties PasswordNeverExpires | where { $.PasswordNeverExpires -eq $true } | select Name | sort Name

Utenti con password configurate “senza scadenza”, ordinati per nome

USERS

Get-ADUser -Filter “Enabled -eq ‘$false'” | Select Name, UserPrincipalName | Sort name

Utenti con account INATTIVI, mostra nome e FQN, ordinati per nome

USERS

Search-ADAccount -AccountDisabled -UsersOnly | FT Name,ObjectClass -A

Utenti con account DISABILITATI, mostra nome e FQN, ordinati per nome

USERS

Search-ADAccount -LockedOut | Format-Table name,lastlogondate, lockedout, objectclass, passwordexpired, passwordneverexpires

Trova utenti con account locked

USERS

Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |Sort-Object | FT Name,ObjectClass -A

Trova account utente non utilizzati per 90 giorni

USERS

Get-ADuser -Filter {name -like “*”} -properties *|select @{N=”Account”;E={$_.name}},@{N=”Name”;E={$.givenname}},@{N=”LastName”;E={$.surname}},@{N=”Mail”;E={$.mail}},@{N=”AccountEnabled”;E={$.enabled}},@{N=”MemberOf”;E={(Get-ADPrincipalGroupMembership $).name -join (“rn”,”,,,,,”)}} | Sort-Object “Account” | FT -AutoSize

Gruppi di appartenenza per tutti gli utenti. Ordina i dati come tabella. Usa Export-CSV per restituire un file CSV.

USERS

Get-ADUser -Filter * -Properties LastLogonDate | ? { $_.LastLogonDate -eq $null } | Select name,samaccountname

 

Trova gli utenti che non hanno mai eseguito il login

USERS

 
 
Query Gruppi
L’appartenenza ad un Gruppo in Active Directory ha importanti ricadute sulla sicurezza. Per tale ragione è molto utile poter determinare rapidamente la presenza in gruppi per ogni utente, in modo da garantire la compliance alle policy di sicurezza interna.

Command

What it does

Category

get-adgroup -filter * -Properties GroupCategory | Select name, groupcategory | FT -A

Tutti i Gruppi presenti in Active Directory

GROUPS

Get-ADGroupMember -identity “Administrators” -recursive | select name

Tutti gli utenti del gruppo Domain Administrators

GROUPS

Get-ADPrincipalGroupMembership -identity Turbogeek | Sort-object | FT -property name, samaccountname -AutoSize

Trova i Gruppi ai quali appartiene un utente

GROUPS

Get-ADGroupMember -Identity Domain Admins” -Recursive | %{Get-ADUser -Identity $.distinguishedName -Properties Enabled | ?{$.Enabled -eq $false}} | Select DistinguishedName,Enabled

Trova gli utenti disabilitati nel gruppo Domain Administrators

GROUPS

 
Query Active Directory Infrastructure
Questi comandi forniscono informazioni riguardanti l’infrastruttura.
 

Command

What it does

Category

Get-ADDomainController -Filter * | Format-table name,domain, forest,site, ipv4address, operatingsystem

Trova i Domain controller del dominio

DC

Get-ADDomainController -Filter {IsGlobalCatalog -eq $true} | Select-Object Name,ipv4address,isglobalcatalog, operatingsystem | FT -A

Trova i Global Catalog Server nel dominio, utile se hai più di un domain controller

DC

Get-ADDomainController -Filter {IsReadOnly -eq $true}

Trova i domain controller read-only se applicabile all’infrastruttura (Branch Servers)

DC

Get-ADComputer -Filter ‘Name -like “The-Solving-N1*”‘ -Properties canonicalName, CN, created, IPv4Address, objectclass, OperatingSystem, OperatingSystemServicePack | FT -A

Trova i computer nel dominio come “The-Solving-N1”, mostra informazioni utili in tabella

DC

Get-ADForest | Select-Object -ExpandProperty ForestMode

Ottiene AD Forest level

DC

Get-ADDomain | Select-Object -ExpandProperty domainmode

Ottieni AD Domain level

DC

Get-ADReplicationConnection -Filter {AutoGenerated -eq $true}

Ottieni dettagli sulla replica del dominio. Saranno restituiti dati solo se presente più di un domain controller.

DC

$datecutoff = (Get-Date)
Get-ADComputer -Filter {LastLogonTimestamp -lt $datecutoff} -Properties Name,LastLogonTimeStamp|  Select Name,@{N=’LastLogonTimeStamp’; E={[DateTime]::FromFileTime($_.LastLogonTimeStamp)}}

Esegui questo script da PowerShell ISE. Configura il $datecutoff e questo indicherà l’orario dell’ultimo login di un computer.

DC

 
Modifica Active Directory
Puoi anche utilizzare PowerShell per modificare il dominio Active Directory. Usa questi comandi con cautela, specie se sei alle prime armi con PowerShell.

Command

What it does

Category

Disable-ADaccount -identity The-Solving

Disabilita l’account The-Solving

USERS

Enable-ADaccount -identity The-Solving

Abilita l’account The-Solving

USERS

Set-ADAccountExpiriation -Identity The-Solving -datetime “07/01/2019”

Configura l’account The-Solving per scadere il 7 Gen 2019

USERS

Clear-ADAccountExpiration -identity The-Solving

Disabilitare la data di scadenza dell’account

USERS

Set-ADAccountPassword -identity The-Solving -reset -newpassword (Convertto-Securestring -asplaintext “Passw0rd123!” -Force)

Cambia la password utente cifrando la trasmissione – essenziale

USERS

Unlock-ADAccount -identity The-Solving

Sblocca l’account The-Solving

USERS

New-AdGroup -Name “Test Users” -SamAccountName TestUser -GroupCategory Security -GroupScope Global -displayname ‘Test Users’ -Path “OU=Groups, OU=Resources, DC=TEST, DC=UK -Description “All Test Users”

Crea un Security Group chiamato Test Users nelle OU Groups > Resources

GROUPS

Set-ADGroup -Identity ‘Test Users’ -groupcategory Distribution -groupscope Universal -Managedby ‘TurboGeek’

Modifica il Gruppo Test Users e lo rende un gruppo universale di distribuzione, gestito da voi

GROUPS

search-adaccount -lockedout | unlock-adaccount -passthru -confirm

Trova e sblocca tutti gli account “locked” in Active Directory. Una soluzione semplice ed efficace per l’unlock di gruppo.

USERS

 
Con questo abbiamo completato la nostra Guida completa a PowerShell. Un viaggio breve ed intenso che ci ha portato a grattare la superficie di questo potente e vastissimo strumento che è PowerShell. Rimanete sintonizzati, usciranno altre guide su questo filone!

Immagine
Rispondi