Wiki di Michele

Script, profili ed Execution Policy

GuidaUltima modifica: 24/10/2026 Verificata il 24/10/2026

Come scrivere, avviare e proteggere gli script PowerShell.

Creare ed eseguire uno script

Salva un file con estensione .ps1, ad esempio saluto.ps1:

param(
    [string]$Nome = "mondo"
)
Write-Host "Ciao $Nome"

Eseguirlo:

.\saluto.ps1
.\saluto.ps1 -Nome Michele
& "C:\Script\mio script.ps1"

Il .\ è obbligatorio per i file della cartella corrente. Con spazi nel percorso serve l'operatore di chiamata &.

Da CMD o dal menu Start:

powershell -NoProfile -ExecutionPolicy Bypass -File C:\Script\saluto.ps1

Execution Policy

Determina quali script possono essere eseguiti. Non è un confine di sicurezza (si aggira facilmente) ma una protezione contro esecuzioni accidentali.

Get-ExecutionPolicy
Get-ExecutionPolicy -List
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
PolicyComportamento
RestrictedNessuno script (predefinito nei client Windows)
AllSignedSolo script firmati
RemoteSignedScript locali liberi, quelli scaricati devono essere firmati
UnrestrictedTutto, con avviso per gli script scaricati
BypassNessun blocco né avviso

Per un uso quotidiano, RemoteSigned su CurrentUser è una buona scelta e non richiede privilegi di amministratore.

Per un singolo avvio senza modificare la policy:

powershell -ExecutionPolicy Bypass -File .\script.ps1

I criteri di gruppo possono sovrascrivere le impostazioni locali (MachinePolicy e UserPolicy nell'elenco).

Sbloccare file scaricati

I file da Internet portano un marcatore "Mark of the Web":

Unblock-File .\script.ps1
Get-ChildItem .\Script -Recurse | Unblock-File

Eseguire come amministratore

Se lo script lo richiede:

#Requires -RunAsAdministrator

Oppure auto-elevazione:

if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -File `"$PSCommandPath`""
    exit
}

Direttive utili

#Requires -Version 7.0
#Requires -Modules ActiveDirectory
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"

Parametri di uno script

[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string]$Percorso,
    [switch]$Ricorsivo
)
if ($Ricorsivo) { Get-ChildItem $Percorso -Recurse } else { Get-ChildItem $Percorso }

-Verbose e -WhatIf si possono aggiungere con [CmdletBinding(SupportsShouldProcess)].

Output e log

Write-Host "Messaggio a schermo" -ForegroundColor Green
Write-Output "Dati nella pipeline"
Write-Verbose "Dettaglio"
Write-Warning "Attenzione"
Write-Error "Errore"
Start-Transcript -Path C:\Log\sessione.txt
Stop-Transcript

Usa Write-Output per i dati restituibili e Write-Host solo per messaggi all'utente.

Il profilo

Script eseguito a ogni avvio della console:

$PROFILE
Test-Path $PROFILE
New-Item -ItemType File -Path $PROFILE -Force
notepad $PROFILE

Esempio di contenuto:

Set-Alias np notepad
function ll { Get-ChildItem -Force | Format-Table -AutoSize }
Set-PSReadLineOption -PredictionSource History

Ricarica il profilo con . $PROFILE.

Moduli

Get-Module
Get-Module -ListAvailable
Import-Module ActiveDirectory
Install-Module -Name PSReadLine -Scope CurrentUser
Find-Module *Azure*
Update-Module

Install-Module scarica da PowerShell Gallery (ti chiederà di fidarti del repository). In PowerShell 7 esiste anche Install-PSResource.

Debug

Set-PSDebug -Trace 1
Set-PSDebug -Off
Set-Breakpoint -Script .\script.ps1 -Line 10
Get-PSBreakpoint
Remove-PSBreakpoint

Il debugger integrato di Visual Studio Code con l'estensione PowerShell è il modo più comodo di eseguire passo passo gli script.

Tag

comandipowershellwindows

Altre pubblicazioni in questa sezione

Suggerisci una correzione