2017-07-10 50 views
1

我有一件很奇怪的事情發生。Powershell從批處理調用時需要很多時間來執行?

如果我運行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秒,使得命令非常沉重和憤怒使用。

爲什麼這麼慢?難道是選擇命令還是什麼?因爲當我在一個空test.bat的運行它,它是超級快...:

powershell.exe -command "Measure-Command {Get-ADPrincipalGroupMembership abc00 | select "name" | out-gridview} 

P.S:所有其他在我的批處理文件中的命令是,除了那些PowerShell的快。

非常感謝你的時間和一如既往的幫助。

更新:我試圖刪除選擇菜單entierly並將其替換爲set/p菜單,它仍然需要永久加載......這是一個奇怪的問題。

+0

我建議您用批處理文件完全分配,只是使用PowerShell。 –

+1

我會在'powershell.exe -NoP'之後引入'-NoProfile'或簡短的'-NoP',並使用沒有臨時vbs文件的Powershell來升級。看到我的答案。 – LotPings

回答

1

我使用這個批處理的提升
(BTW的其他答案問不同的問題是有點ahemm題外話)

::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 
+0

明白了,我編輯了我的答案;)這段代碼適用於提升並且不會導致PowerShell命令減慢,謝謝。祝你有美好的一天。 – Rakha

0

奇怪的是我找到了罪魁禍首。我在我的批處理文件的頂部有一部分,以確保它在打開時自動以管理員身份運行,並且使得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") 
:-------------------------------------- 
相關問題