Sono piuttosto nuovo di Powershell e sto lavorando alla configurazione del mio file profile.ps1. Ho alcune DLL gestite che uso spesso per mantenere i processi durante il giorno che mi piacerebbe poter caricare con chiamate di funzione veloci. Così ho creato questa funzione nel mio file ps1:Funzione Powershell che restituisce oggetto istanziato ... tipo?
function LoadSomeDll
{
[System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll")
return new-object "SomeLib.SomeObject"
}
Poi, in PowerShell, faccio questo:
PS > $myLibInstance = LoadSomeDll
Il problema è che $ myLibInstance, anche se sembra essere caricato, non lo fa comportarsi come mi aspetto o se lo farebbe se lo carichi esplicitamente senza la funzione. Supponiamo che SomeLib.SomeObject abbia una proprietà di stringa pubblica "ConnectionString" che carica se stessa (dal registro, yuck) quando l'oggetto viene creato.
PS > $myLibInstance.ConnectionString
//Nothing returned
Ma, se lo faccio senza la funzione, in questo modo:
PS > [System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll")
PS > $myOtherLibInstance = new-object "SomeLib.SomeObject"
ottengo questo:
PS > $myOtherLibInstance.ConnectionString
StringValueOfConnectionStringProperty
Perché accade questo? Esiste un modo per restituire un nuovo oggetto istanziato da una funzione PowerShell?
Grazie in anticipo.
Grazie ancora, JaredPar. Sei stato il mio salvatore PowerShell nell'ultima settimana. –
@PITADev, hai essenzialmente colpito gli stessi problemi che ho riscontrato nei primi giorni di PowerShell quasi nello stesso ordine :). A volte è così poco intuitivo. – JaredPar
+1 bella spiegazione. Ho riscontrato anche questo problema. –