Performance 从批处理调用Powershell时,执行Powershell需要花费大量时间?
我发生了一件很奇怪的事 如果运行powershell.exe,则在窗口中键入以下命令: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
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