Performance 从批处理调用Powershell时,执行Powershell需要花费大量时间?

Performance 从批处理调用Powershell时,执行Powershell需要花费大量时间?,performance,powershell,batch-file,Performance,Powershell,Batch File,我发生了一件很奇怪的事 如果运行powershell.exe,则在窗口中键入以下命令: Measure-Command {Get-ADPrincipalGroupMembership abc00 | select "name" | out-gridview } 这个命令非常快,大约需要2秒钟 现在,如果我从一个批处理文件(,其中包含一个简单的选择菜单)运行完全相同的内容,如下所示: powershell.exe -command "Measure-Command {Get-ADPrincipa

我发生了一件很奇怪的事

如果运行powershell.exe,则在窗口中键入以下命令:

Measure-Command {Get-ADPrincipalGroupMembership abc00 | select "name" | out-gridview }
这个命令非常快,大约需要2秒钟

现在,如果我从一个批处理文件(,其中包含一个简单的选择菜单)运行完全相同的内容,如下所示:

powershell.exe -command "Measure-Command {Get-ADPrincipalGroupMembership abc00 | select "name" | out-gridview} 
这需要15秒的时间,使得命令非常繁重,使用起来很烦人

为什么这么慢?可能是选择命令还是什么?因为当我在一个空测试中运行它的时候。bat它超快…:

powershell.exe -command "Measure-Command {Get-ADPrincipalGroupMembership abc00 | select "name" | out-gridview} 
注意:我的批处理文件中的所有其他命令都很快,除了powershell命令

非常感谢您一如既往地抽出时间和帮助


更新:我试图完全删除选项菜单,并将其替换为set/p菜单,但它仍然需要很长时间才能加载…这是一个多么奇怪的问题。

奇怪的是,我找到了罪魁祸首。我在批处理文件的顶部有一部分,以确保它在打开时以管理员身份自动运行,这使得powershell命令的速度非常慢!删除它后,powershell命令运行速度非常快

这是一段对我来说非常有用的代码,但现在我发现它减慢了powershell的速度…没那么多

    REM  --> Check for permissions
    "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system">nul 2>NUL

    REM --> If error flag set, we do not have admin.
    if '%errorlevel%' NEQ '0' (
        echo Requesting administrative privileges...
        goto UACPrompt
    ) else ( goto gotAdmin )

    :UACPrompt
        if exist "%temp%\getadmin.vbs" (
            del "%temp%\getadmin.vbs"
            echo Failed to acquire elevated privilege.  Try saving this script and running it from your Desktop.
            echo;
            echo Press any key to exit.
            pause>NUL
            goto :EOF
        )
        echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp%\getadmin.vbs"

        cscript /nologo "%temp%\getadmin.vbs"
        goto :EOF

    :gotAdmin
        if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
:--------------------------------------

我使用此批次提升
(顺便说一句,问另一个问题的另一个答案有点离题)


我建议完全不用批处理文件,只使用PowerShell。我会在
PowerShell.exe-NoP
之后插入
-NoProfile
或short
-NoP
,并使用没有临时vbs文件的PowerShell进行升级。查看我的答案。明白了,我编辑了我的答案;)此代码用于提升,不会导致powershell命令的速度减慢,非常感谢。祝您今天过得愉快。
::ElevateMe.cmd::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off & setlocal EnableExtensions DisableDelayedExpansion
net file 1>nul 2>&1 || (powershell -NoP -NoL -Ex unrestricted -Command ^
"Start-Process -Verb RunAs -FilePath '%comspec%' -ArgumentList '/c %~f0 %*'"
  goto :eof)
:: Put code here that needs elevation