alphasec
PowerShell protip 0083
in 𝕏

Kolejny sposób blokowania ekranu PowerShellem

tty1 · powershell
PS> (Add-Type -m '[DllImport("user32.dll")]public static extern bool LockWorkStation();' -Name "Lock" -pas)::LockWorkStation()
#Powershell#ProzaŻycia#Windows

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.

Przydatne linki

learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-type dokumentacja cmdletu Add-Type web ↗ https://learn.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke mechanizm Platform invoke (P/Invoke) web ↗ # aptm.in/protip/0081 rundll32 user32,LockWorkStation - zablokuj ekran z wiersza poleceń protip ↗ # aptm.in/protip/0082 Add-Type -t 'public class User32 {[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern bool LockWorkStation();}'; [User32]::LockWorkStation() - zablokuj ekran PowerShellem protip ↗ # aptm.in/protip/007f Add-Type -t 'public class Foo { public static void Main(){ System.Console.WriteLine("Ciekawe te protipy!");}}';[Foo]::Main() - uruchom kod C# prosto z PowerShella protip ↗
← poprzedni protip 0082 ••• Wszystkie protipy następny → protip 0084
// subskrybuj

Nowe protipy prosto na maila.

Mięsiste jednolinijkowce i triki z prawdziwych zleceń. Zero spamu, zero teorii. Wypisujesz się jednym kliknięciem.

wersja newslettera: