PowerShell a VB.net   zodpovězená otázka

VB.NET

Len včera som sa začal prvý krát hrať s power shellom.

Mám takú otázku. Keby som si vytvoril aplikáciu(vb.net), ktorá používa moju dll(vb.net) v ktorej mám uložené v štruktúre nejaké dáta. Dá sa pri behu tejto aplikácie, nareferencovať túto dll do power shellu a následne vytiahnúť(zobraziť) z tejto štruktúry dáta, ktoré naplnila aplikácia. Všetko by sa to malo odohrať pri run-time aplikácie.

Za nápady ďakujem.

Vašo.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Buď nechápu váš dotaz, nebo nechápete princip, jakým fungují procesy ve Windows. Máte svoji aplikaci, která používá funkce z nějaké DLL knihovny. Ale to, že máte v knihovně nadeklarovanou strukturu, neznamená, že se data ukládají do té knihovny, a už vůbec by nemělo jít dostat se k datům jedné aplikace z aplikace druhé. Každá aplikace má svůj virtuální adresní prostor.

Jedině využít nějak shared memory, ale to je podle mě zbytečně složité.

Můžete si napsat vlastní commandlet (příkaz powershellu), který se nějak běžící aplikace zeptá a data si z ní vyžádá, ale abyste referencoval dll knihovnu do powershellu nebo co jste to chtěl, to je hloupost. Pokud byste chtěl volat pouze funkce této knihovny, pak ano, ale k datům cizí aplikace se nedostanete.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Je mi jasné, že to nejde len tak, preto sa pýtam :-)

Pod tým, že dáta sa ukladajú do knižnice som nemyslel, že sa tam fyzicky ukladajú, ale že je tam štruktúra a premenná reprezentujúca inštanciu tejto štruktúry. Ospravedlňujem sa za zlé vyjadrenie.

Dobre teda toto asi nebude správna cesta. Ako sa teda dá vyžiadať z powershellu od aplikácie nejaké dáta. Mohli by ste ma aspoň nasmerovať prosím.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proměnná reprezentující instanci struktury je vždy v paměťovém prostoru aplikace, která knihovnu využívá. Samotná DLL knihovna není nic jiného než hloupý kontejner na třídy který musí někdo využít.

Z příkladu T. Hercega usuzuji, že můžete pomocí Reflection načíst libovolnou Assembly (tedy i vámi vytvořenou) a z ní potom vytvářet instance tříd a volat jejich členy.

[System.Reflection.Assembly]::LoadFrom("C:\MyClassLibrary.dll")
$MyClass = new-object MyClassLibrary.Class1
$MyClass.DoSomething()

Syntakticky vám ovšem nezaručím že toto bude fungovat, protože momentálně PowerShell nemám nainstalován abych se o tom přesvědčil.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Áno, malo by to fungovať, ale ja som mal otázku, ako sa dostať k dátam mojej aplikácie ktorá práve beží napr. uložených v nejakej štruktúre z power shellu. Resp. ako spraviť prepojenie aplikácie a power shellu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No tak to samozřejmě běžným způsobem nejde. Aplikace na platformě .NET běží v izolovaném paměťovém prostoru zvaném aplikační doména a do této domény se nedostane nic jiného. Jediné řešení by bylo udělat to např. pomocí Remotingu kde byste si v PowerShellu vytvořil instanci remotingového klienta připojeného k remotingovému serveru který by mohl poskytovat data.

Popravdě řečeno nevím k čemu vůbec potřebujete v PowerShellu přistupovat k datům nějaké aplikace, PowerShell není vývojářský nástroj ale nástroj který má ulehčovat správu systému.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mám aplikáciu, ktorá mi posiela raz denne výsledok nejakých štatistických údajov na mail od zákazníka do firmy. Pričom mail je rozdelený na časti - jedna časť = jeden užívateľ. Mal som takú predstavu, že keď prídem k zakazníkovi budem schopný si pomocou power shellu tieto štat. údaje nechať vypísať.

Samozrejme dala by sa spraviť funkcia, ktorá vytiahne tieto dáta z databázy a zobrazí ich. Ja len špekulujem ako to spraviť čo najjednoduchšie, aby som takú funkciu nemusel písať ale len ťahať dáta rovno z pamäte. :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proč proboha přímo tahat z paměti? Ideální by bylo napojit se na databázi, pokud ale nedáte jinak, můžete využít remoting nebo named pipes, ale k tomu byste si asi musel dopsat do powershellu vlastní plugin, což není těžké. Dopočučuji Vám podívat se na slajdy a ukázkov příklad z mé přednášky, které najdete na http://download.herceg.cz. Je tam poměrně podrobně popsáno, jak vlastní commandlet napsat a jak jej nainstalovat do powershellu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback