# encoding: ascii # api: powershell # title: Set-Privilege # description: I thought that it’s impossible. Some guy who calls himself gregzakh wrote a demo module called Func which allows you to invoke some WinAPI functions without defining dynamic modules in memory. This module correctly works on PowerShell v2, 4 and 5 (I have not got PowerShell v3 to test it). The script below uses Func library to set SeShutwondPrivilege privilege up for current PowerShell host. # version: 0.1 # type: script # author: Dan Jones # license: CC0 # function: Set-Privilege # x-poshcode-id: 6358 # x-archived: 2016-05-28T02:16:52 # x-published: 2016-05-25T07:33:00 # # # this script is a part of Func module (https://github.com/gregzakh/Func) function Set-Privilege { param( [Parameter(Position=0)] [ValidateRange(2, 35)] [UInt32]$Privilege = 19, #SeShutdownPrivilege [Parameter(Position=1)] [Switch]$Enable = $true ) begin { $ptr, $null = Get-ProcAddress ntdll RtlAdjustPrivilege $RtlAdjustPrivilege = Set-Delegate $ptr ` '[Action[UInt32, Boolean, Boolean, Text.StringBuilder]]' $ret = New-Object Text.StringBuilder } process { $RtlAdjustPrivilege.Invoke($Privilege, $Enable, $false, $ret) } end {} }