Utilizzando Joey 's risposta è possibile utilizzare questo funzione per impostare "alias" per gli assiemi. Assegna fondamentalmente un assembly a una funzione con il nome dell'alias specificato che si desidera.
function Global:Add_Assembly_Alias($STR_assembly, $alias) {
[string]$assembly = "$STR_assembly.{0}"
$ExecutionContext.InvokeCommand.InvokeScript(
$ExecutionContext.InvokeCommand.NewScriptBlock("
function Global:$alias(`$namespace) {
[string](`"$assembly`" -f `$namespace)
}
")
)
}
E.g. se si desidera assegnare System.Windows.Forms a wforms si potrebbe chiamare la funzione principale, come
Add_Assembly_Alias System.Windows.Forms wforms
Essa si genera la funzione chiamata "wforms" con spazio dei nomi come argomento che può essere utilizzato per aggiungere nuovi oggetti, ecc Se si desidera aggiungere, ad esempio un oggetto testo si sarebbe solo dovuto chiamare
$tb = new-object (wforms TextBox)
non è molto, ma penso che questo sia il più vicino si può arrivare a assegnare un assemblaggio a qualcosa di simile a un alias. Purtroppo non sono riuscito a impelement questo per le chiamate dirette della forma
[Windows.Forms.MessageBox]::Show("Hello World!")
ma spero che questo aiuta ancora.
Cheers, D
Vi ringrazio entrambi per aver risposto –
non sapevo su System di essere implicita. Grazie! – Kleinux
@Kleinux: Funziona per riferirsi ai tipi, ed è per questo che puoi scrivere '[datetime]' invece di '[system.datetime]' ma non funzionerà per caricare un assembly (cioè, Add-Type - Assembly Windows.Forms' non funzionerà). – Joey