如何在管理模式下使用'-command'参数执行powershell

时间:2015-12-07 20:16:03

标签: powershell

如何使用-command参数运行powershell?

我尝试添加'-Verb runAs',但我得到一个空值表达式。

powershell -Verb runAs -command "(Get-Date (Get-Process explorer).StartTime).ToString('yyyyMMdd')"

我使用admin right,命令

打开一个PowerShell
  

(Get-Date(Get-Process explorer).StartTime).ToString('yyyyMMdd')

返回正确的值。但是当我在没有管理员权限的情况下启动PowerShell时,我得到一个空值。

所以我认为问题是'powershell -Verb runAs'没有在管理模式下运行命令。

注意:我在尝试此操作时以广告管理系统登录。

1 个答案:

答案 0 :(得分:1)

因此,如果您不介意运行脚本而不是仅仅执行命令,那么可以在脚本中完成提升PowerShell的过程。这将检查进程是否已经提升,如果没有,它将使用RunAs动词重新启动进程,以便它以提升的权限运行。

# Elevate UAC if not already running As Administrator
# Get the ID and security principal of the current user account
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

# Get the security principal for the Administrator role
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Check to see if we are currently running "as Administrator"
if (!$myWindowsPrincipal.IsInRole($adminRole))
{
    # We are not running "as Administrator" - so relaunch as administrator
    # Create an encoded string to re-launch the script bypassing execution policy
    $Code = ". '$($myInvocation.MyCommand.Definition)'"
    $Encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($code))

    # Indicate that the process should be elevated
    Start-Process PowerShell.exe -Verb RunAs -ArgumentList "-EncodedCommand",$Encoded

    # Exit from the current, unelevated, process
    exit
}
# End UACElevation

代码加密命令有点令人费解,但事实并非如此,但我发现如果我没有这样做,我有时会遇到阻止我的执行策略问题。这避免了执行策略阻止PowerShell运行脚本,因为它在技术上不运行脚本,只运行编码命令。该命令正好恰好是PSSession启动后运行脚本。