2017-07-13 26 views
7

Chcę użyć typu danych z biblioteki Universal Windows Platform, jak mogę odwołać się do zawierającego przestrzeń nazw lub złożenia w PowerShell?Jak mogę odwoływać się do klas UWP w PowerShell

Na przykład chcę użyć Windows.Data.Json.JsonObject class, aby przetworzyć dla mnie kilka jsonów.

Gdyby to była regularna klasa .NET, chciałbym zrobić coś jak

Add-Type -AssemblyName Windows.Data.Json 
$jsonObject = [Windows.Data.Json.JsonObject]::Parse('{data:["powershell","rocks"]}') 

Ale ta strategia nie mnie:

Add-Type : Cannot add type. The assembly 'Windows.Data.Json' could not be found. 
At line:1 char:1 
+ Add-Type -AssemblyName Windows.Data.Json 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (Windows.Data.Json:String) [Add-Type], Exception 
    + FullyQualifiedErrorId : ASSEMBLY_NOT_FOUND,Microsoft.PowerShell.Commands.AddTypeCommand 

Teraz może się okazać, że jestem po prostu źle w założeniu, że zespół dla przestrzeni nazw jest Windows.Data.Json.dll, ale odwołanie API w rzeczywistości nie wydaje się zawierać żadnych odniesień do zawierających pliki, co prowadzi mnie do przekonania, że ​​plik DLL w rzeczywistości nie jest tym, czego powinienem szukać.

Zakładam, że UWP ma swój własny fajny sklep podobny do GAC-a, z którego mogę ładować biblioteki współdzielone, po prostu nie wiem jak.

Moje pytanie brzmi: jak mogę załadować bibliotekę współdzieloną UWP do PowerShella i jak mam odnieść się do literówek typu UWP?

Running PowerShell 5.1 w systemie Windows 10 (build 1703)

Odpowiedz

6

Krótko po zaksięgowaniu pytanie, natknąłem się na the GitHub repo for BurntToast, moduł, który umożliwia podnoszenie UWP Wyskakujące powiadomienia z PowerShell i odwołuje typ WinRT ToastNotificationManager tak :

[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] 

Tak, wygląda na to, składni jestem po dla klas UWP jest:

[<class name>,<namespace>,ContentType = WindowsRuntime] 

Mając to na uwadze, próbowałem go na przykładzie dałem w pytaniu i oto:

PS C:\> $jsonObjectClass = [Windows.Data.Json.JsonObject,Windows.Data.Json,ContentType=WindowsRuntime] 
PS C:\> $jsonObject = $jsonObjectClass::Parse('{"data":["powershell","rocks"]}') 
PS C:\> $jsonObject 

Key Value     
--- -----     
data ["powershell","rocks"] 

Po przedstawieniu nazwę typu raz, wydaje mi się, aby móc korzystać z nazwy klasy w typie dosłowny bez zakwalifikowania go jako dobrze:

[Windows.Data.Json.JsonObject]::Parse("{}") # works without throwing errors now 

Nadal bardzo pragnie znaleźć żadnej dokumentacji na ten temat choć

+1

Czy zaakceptować [blogu] (https://blogs.msdn.microsoft.com/ptorr/ 2012/05/27/loading-winrt-types-via-reflection-in-windows-8 /)? –

+0

@ PeterTorr-MSFT Drobne referencje, zachęcamy do dodania odpowiedzi opisującej znaczenie parametru GetType/TypeInfo –

Powiązane problemy