Comando "complesso" di avvio rapido dall'interno di PowerShell
È possibile eseguire comandi PowerShell "complessi" dall'interno di PowerShell utilizzando un alias?
Per darti un esempio, vorrei sostituire il comando Get-VpnConnection -name "VPNname"tramite un comando di una parola (non riservato), ad esempio vpntramite un alias? Purtroppo set-Alias vpn "Get-VpnConnection -name VPNname"non funziona, né funziona set-Alias vpn Get-VpnConnection -name "VPNname"(notare la diversa posizione delle prime virgolette).
Finora la mia "soluzione alternativa" è salvare il comando come file di script nella "directory di avvio" di PowerShells (nel mio caso C:\Users\username) ed eseguirlo .\vpn.ps1tramite un alias. Creo l'alias usando set-Alias vpn ".\script_vpncheck.ps1". C'è un modo diretto per farlo (senza creare un file di script)?
Domanda di follow-up: nel caso in cui ciò non sia possibile, vorrei inizializzare gli alias utilizzando un file di script, ad esempio tramite .\script.ps1(Nota: non è necessario memorizzarli in modo permanente). Purtroppo questo non funziona. Il file sembra essere eseguito ma gli alias non funzionano. Qualche idea sul perché?
Risposte
Basta memorizzare l'alias nel profilo
- Apri il profilo da PowerShell eseguendolo
notepad $PROFILE(o usa un tuo editor preferito) - Inserisci i comandi che desideri eseguire in quel file e salva (ad esempio
Set-Alias) - Riavviare PowerShell o generare il profilo appena aggiornato eseguendo
. $PROFILE
Il profilo è esattamente come .bashrcin bash che verrà eseguito all'avvio della shell. Oltre agli alias puoi anche scrivere funzioni per cose più complesse. Saranno disponibili dopo l'avvio di PowerShell
function vpn($url) { Get-VpnConnection -name $url }
Set-Alias -Name vpn -Value Get-VpnConnection
Non è possibile impostare alias per comandi con argomenti, quindi è necessario creare una funzione in questo caso
Il motivo per cui il file ps1 non funziona è perché viene eseguito nella subshell e quando la subshell si chiude, tutto verrà cancellato, inclusi i nuovi alias. È necessario generare lo script utilizzando l'operatore punto sorgente .(simile a .bash) per eseguirlo nella shell corrente
. .\script.ps1
Ma invece di procurartelo ogni volta che vuoi l'alias, fallo in modo permanente nel profilo come sopra
Gli alias non sono destinati a prendere parametri. Dall'argomento della guida about_aliases:
NOMI ALTERNATIVI PER COMANDI CON PARAMETRI
È possibile assegnare un alias a un cmdlet, script, funzione o file eseguibile. Non è possibile assegnare un alias a un comando e ai suoi parametri. Ad esempio, è possibile assegnare un alias al cmdlet Get-Eventlog, ma non è possibile assegnare un alias al comando Get-Eventlog -LogName System.
È possibile creare una funzione che includa il comando. Per creare una funzione, digita la parola "funzione" seguita da un nome per la funzione. Digita il comando e racchiudilo tra parentesi graffe ({}).
Ad esempio, il seguente comando crea la funzione syslog. Questa funzione rappresenta il comando Get-Eventlog -LogName System:
function Get-SystemEventlog {Get-Eventlog -LogName System} Set-Alias -Name syslog -Value Get-SystemEventlogÈ ora possibile digitare "syslog" invece del comando. Inoltre, puoi creare alias per la nuova funzione.
Ma non hai bisogno di un file di script separato. Puoi definire una semplice funzione e aggiungerla al tuo profilo con il seguente codice:
'Function vpn { Get-VpnConnection -name VPNname }' | Add-Content $PROFILE
Il comando vpnsarà disponibile in tutte le sessioni di PowerShell da quel momento in poi.