Kolejny sposób blokowania ekranu PowerShellem
Alternatywna wersja protipa /pl/0082 czyli blokowania ekranu PowerShellem. Różnica polega na tym, że zamiast tworzyć nową klasę cmdletem Add-Type z kodem źródłowym przekazanym do parametru -TypeDefinition, wykorzystujemy parametr -MemberDefinition (w skrócie -m), który pozwoli nam uzyskać dostęp do natywnych ("niezarządzalnych" - ang. unmanaged) funkcji biblioteki napisanej w dowolnym języku. Dla chcących zgłębić temat, wykorzystywany jest mechanizm P/Invoke.
Parametr -pas czyli -PassThru spowoduje, że Add-Type zwróci nam obiekt reprezentujący dodane typy, przec co możemy od razu się do niego odwołać ( ::LockWorkStation()) bez konieczności tworzenia dodatkowej zmiennej.
Być może nieco bardziej czytelną formą będzie:
$sig = '[DllImport("user32.dll")]public static extern bool LockWorkStation();'
$User32LockWorkStation = Add-Type -MemberDefinition $sig -Name "Lock" -PassThru
$User32LockWorkStation::LockWorkStation()
Ponownie warto pamiętać, że w tle uruchomi się kompilator csc.exe, zgodnie z tym co omawialiśmy przy okazji protipa /pl/007f.