# encoding: ascii # api: powershell # title: sudo for Powershell # description: Updated from other people’s attempts. Useful for calling programs (notepad.exe, etc) or for running powershell scripts in an elevated prompt (use the -ps flag) # version: 1.3 # type: script # author: pezhore # license: CC0 # x-poshcode-id: 1874 # x-derived-from-id: 3056 # x-archived: 2017-05-22T04:45:26 # x-published: 2011-05-25T09:54:00 # # # sudo.ps1 # # Authors: pezhore, mrigns, This guy: http://tsukasa.jidder.de/blog/2008/03/15/scripting-sudo-with-powershell # Other powershell peoples. # # Sources: # http://tsukasa.jidder.de/blog/2008/03/15/scripting-sudo-with-powershell # http://www.ainotenshi.org/%E2%80%98sudo%E2%80%99-for-powershell-sorta # # Version: # 1.0 Initial version # 1.1 added -ps flag, cleaned up passed $file/$script full path # 1.2 Comments # 1.3 Fixed passing working directory to powershell/auto closing param( [switch]$ps, # Switch for running args as powershell script [string]$file, # Script/Program to run [string]$arguments = $args # Arguments to program/script ) # Find our powershell full path $powershell = (get-command powershell).definition # Get current directory $dir = get-location #If we're running this as a elevated powershell script if ($ps){ # Script verification if([System.IO.File]::Exists("$(get-location)\$file")) { # Set the $script to full path of the ps script $script = (get-childitem $file).fullname } # Create a powershell process $psi = new-object System.Diagnostics.ProcessStartInfo $powershell $psi.WorkingDirectory = Get-Location # Combine the script and its arguments $sArgs = $script + " " + $arguments # Set the arguments to be the ps script and it's arguments $psi.Arguments = "-noexit -command set-location $dir; $sArgs" # Magic to run as elevated $psi.Verb = "runas"; } # We're running something other than a powershells script else { # File verification if([System.IO.File]::Exists("$(get-location)\$file")) { # Get full path $file = (get-childitem $file).fullname } # Same as above, create proccess/arguments/runas $psi = new-object System.Diagnostics.ProcessStartInfo $file $psi.Arguments = $arguments $psi.Verb = "runas" } # Start the process [System.Diagnostics.Process]::Start($psi)