HOWTO · PowerShell

Come eseguire uno script PowerShell senza visualizzare una finestra

Esegui script PowerShell con una finestra nascosta o con l'Utilità di pianificazione e comprendi i limiti del contesto di avvio, i file batch e le alternative di servizio.

In questa pagina

In Windows, avvia uno script con powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1", sostituendo il percorso tra virgolette con il percorso assoluto del tuo script. Il parametro -WindowStyle Hidden controlla l’aspetto della finestra di PowerShell; non garantisce che ogni utilità di avvio o applicazione secondaria rimanga invisibile.

Eseguire PowerShell con -WindowStyle Hidden

Usa il comando sopra da un’utilità di avvio di Windows come la finestra di dialogo Esegui. -File identifica lo script; le virgolette proteggono i percorsi che contengono spazi. -NoProfile salta gli script di avvio del profilo, quindi la tua attività deve caricare le proprie dipendenze.

La visibilità della finestra dipende dall’host e dal contesto di avvio: una console può apparire brevemente durante l’avvio. Non fare affidamento su questo comando per nascondere un terminale già aperto. Le applicazioni avviate dallo script possono mostrare le proprie finestre. Una finestra nascosta non nasconde nemmeno il processo da Gestione attività.

Le istruzioni di avvio di Windows in questo articolo sono illustrazioni non eseguite; non viene fornito alcun comportamento della finestra osservato né output dei comandi.

Avviare lo script da un file batch

Salva due righe in run_script.bat: prima @echo off, poi powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1". Sostituisci il percorso prima di eseguirlo.

@echo off sopprime l’eco dei comandi nella console batch. Non nasconde tale console, non sopprime l’output dello script né impedisce un lampo all’avvio. Un file batch è comodo per avvii ripetuti, ma l’Utilità di pianificazione è più adatta al lavoro non presidiato senza una console interattiva.

Eseguire lo script con l’Utilità di pianificazione

  1. Apri l’Utilità di pianificazione, scegli Crea attività e assegna all’attività un nome descrittivo.
  2. In Generale, seleziona un account con accesso allo script e alle sue risorse. Per il lavoro non presidiato, scegli Esegui indipendentemente dalla connessione dell’utente e fornisci le credenziali se richiesto. Ciò usa un contesto non interattivo; gli script che richiedono l’interazione con il desktop potrebbero non riuscire. Abilita Esegui con i privilegi più elevati solo quando l’attività richiede l’elevazione e l’account è autorizzato a essa. L’elevazione non controlla la visibilità.
  3. In Attivazioni, aggiungi la pianificazione o l’evento che ti serve.
  4. In Azioni, scegli Nuova e Avvia programma. Seleziona l’eseguibile powershell.exe installato. In Aggiungi argomenti, inserisci -NoProfile -NonInteractive -WindowStyle Hidden -File "C:\Scripts\Task.ps1". Imposta Inizio in su C:\Scripts senza virgolette, adattando entrambi i percorsi. -NonInteractive impedisce che le richieste di input attendano un utente; non nasconde le finestre.
  5. Salva l’attività, fai clic con il pulsante destro del mouse su di essa e scegli Esegui per un test manuale. Ciò la avvia immediatamente senza attendere la sua attivazione. Controlla la sua cronologia, il Risultato ultima esecuzione e i registri dello script.

Usare PSExec o NSSM solo per attività adeguate

PSExec, di Microsoft Sysinternals, è adatto all’amministrazione remota o all’esecuzione con un altro account. La sua opzione -d significa non attendere, e -s seleziona l’account SYSTEM; nessuna delle due è un interruttore per nascondere le finestre. SYSTEM ha un accesso alle risorse diverso dal tuo account utente. Queste opzioni non sono necessarie per i normali avvii nascosti.

NSSM (Non-Sucking Service Manager) racchiude le applicazioni come servizi di Windows. Scaricalo dal suo sito di download ufficiale, https://nssm.cc/download. L’installazione di un servizio richiede diritti amministrativi. Configura deliberatamente l’eseguibile di PowerShell, gli argomenti dello script, la directory di lavoro, l’account del servizio, la registrazione e il comportamento di riavvio. Usalo per carichi di lavoro simili a servizi che non richiedono un desktop interattivo; un breve script pianificato di solito necessita solo dell’Utilità di pianificazione. Il bypass della politica di esecuzione modifica la gestione della politica per gli script, non la visibilità delle finestre, e non è richiesto per nascondere una finestra.

Testare lo script e scegliere il metodo giusto

Per prima cosa esegui lo script in modo visibile con l’account previsto. Controlla le autorizzazioni dei file, le dipendenze, i percorsi assoluti e i messaggi della politica di esecuzione. Gli account pianificati potrebbero non avere le tue unità mappate o le impostazioni del tuo profilo. Salva output ed errori in una posizione in cui tale account possa scrivere; una finestra che scompare non è una prova di successo.

Questo esempio di registrazione PowerShell autonomo non è eseguito. Scrive un messaggio di completamento in un file temporaneo, lo legge e rimuove il file in seguito:

$logPath = [System.IO.Path]::GetTempFileName()
try {
    'Task completed' | Set-Content -LiteralPath $logPath
    Get-Content -LiteralPath $logPath
}
finally {
    Remove-Item -LiteralPath $logPath
}

Per il tuo script reale, conserva un file di registro stabile e registra i fallimenti oltre al completamento. Scegli l’avvio diretto per un uso occasionale, un file batch per comodità, l’Utilità di pianificazione per le attivazioni non presidiate o NSSM per un carico di lavoro di servizio. Controlla il comportamento dipendente dal desktop sulla macchina Windows di destinazione prima di fare affidamento su qualsiasi avvio nascosto.