The following script allows you to run another PowerShell as a different user. I use this sort of functionality when I’m testing software on another account (typically a standard user account). I know, bad dev, I should be running as standard user instead of admin. Oh well, I’ll make that switch when I move to Vista.
Save this script to a file called something like SU.PS1.
#######################################################################
# Author: Keith Hill
# with help from Tony at http://mshforfun.blogspot.com/
# and William Stacey
#
# Desc: Launch a new powershell.exe with someone else’s identity
#
# To enable console prompting execute the following:
#
# $key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
# Set-ItemProperty $key ConsolePrompting True
#
#######################################################################
$cred = get-credential $null
$domain = "."
$user = $cred.UserName
$username = $cred.UserName
if ($user.IndexOf(‘\’) -ge 0)
{
$tokens = $cred.UserName.Split(‘\’)
$domain = $tokens[0]
$user = $tokens[1]
}
$StartInfo = new-object System.Diagnostics.ProcessStartInfo
$StartInfo.FileName = "${PSHOME}\powershell.exe"
$StartInfo.Arguments="-noexit -command `$Host.UI.RawUI.WindowTitle=\`"Windows PowerShell ($($username)) \`""
$StartInfo.UserName = $user
$StartInfo.Password = $cred.Password
$StartInfo.Domain = $domain
$StartInfo.LoadUserProfile = $true
$StartInfo.UseShellExecute = $false
$StartInfo.WorkingDirectory = (get-location).Path
$proc = [System.Diagnostics.Process]::Start($StartInfo)
"Started new PowerShell as user: $username in process id: $(${proc}.Id)"
""
# Author: Keith Hill
# with help from Tony at http://mshforfun.blogspot.com/
# and William Stacey
#
# Desc: Launch a new powershell.exe with someone else’s identity
#
# To enable console prompting execute the following:
#
# $key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
# Set-ItemProperty $key ConsolePrompting True
#
#######################################################################
$cred = get-credential $null
$domain = "."
$user = $cred.UserName
$username = $cred.UserName
if ($user.IndexOf(‘\’) -ge 0)
{
$tokens = $cred.UserName.Split(‘\’)
$domain = $tokens[0]
$user = $tokens[1]
}
$StartInfo = new-object System.Diagnostics.ProcessStartInfo
$StartInfo.FileName = "${PSHOME}\powershell.exe"
$StartInfo.Arguments="-noexit -command `$Host.UI.RawUI.WindowTitle=\`"Windows PowerShell ($($username)) \`""
$StartInfo.UserName = $user
$StartInfo.Password = $cred.Password
$StartInfo.Domain = $domain
$StartInfo.LoadUserProfile = $true
$StartInfo.UseShellExecute = $false
$StartInfo.WorkingDirectory = (get-location).Path
$proc = [System.Diagnostics.Process]::Start($StartInfo)
"Started new PowerShell as user: $username in process id: $(${proc}.Id)"
""
Actually, "Su" means switch user. So you can switch to Administrators or switch to Users
Yeah according to Wikipedia it is subsitute user. Same thing I guess as switch user so SU.PS1 is a fine name then plus it is a shorter name. 🙂
http://en.wikipedia.org/wiki/Su_%28Unix%29