在 CMD 中运行 PowerShell 脚本(带有弹出窗口)
Posted
技术标签:
【中文标题】在 CMD 中运行 PowerShell 脚本(带有弹出窗口)【英文标题】:Running PowerShell Script in CMD (with popup window) 【发布时间】:2022-01-09 10:30:49 【问题描述】:您好,我通常只需右键单击并编辑我的脚本,然后使用绿色箭头通过 PowerShell ISE 运行它们。
但我需要在批处理文件中启动/等待脚本。我希望我的脚本运行,然后让批处理文件的其余部分等到 PowerShell 脚本关闭。 (因此开始/等待)
它工作正常,但我的问题是: 它可以正常打开,但无论我是通过选项选择字母还是在选择脚本中设置的数字,它都会根据选择重新启动或关闭。
**我有很好的照片,但我没有足够的代表,所以这里有一些代码:(
powershell.exe Set-ExecutionPolicy -ExecutionPolicy Bypass
#Main Choice Script
$IP = New-Object System.Management.Automation.Host.ChoiceDescription '&Edit IP', 'Change IP
Address'
$Intro= New-Object System.Management.Automation.Host.ChoiceDescription '&Change Introscreen',
'Change Introscreen'
$Gecko = New-Object System.Management.Automation.Host.ChoiceDescription '&Replace Gecko',
'Change Gecko Folder'
$PCName = New-Object System.Management.Automation.Host.ChoiceDescription '&Host Name', 'Fix
Host Name'
$Firewall = New-Object System.Management.Automation.Host.ChoiceDescription '&Firewall
Settings', 'Fix Firewall Setting'
$Close = New-Object System.Management.Automation.Host.ChoiceDescription '&Close', 'Exit'
$options = [System.Management.Automation.Host.ChoiceDescription[]]
($IP,$Intro,$Gecko,$PCName,$Firewall,$Close)
$title = 'IT Tool'
$message = 'What do you want to do?'
$result = $host.ui.PromptForChoice($title, $message, $options,-1)
switch ('$result')
0 "IP"
1 "Intro"
2 "Gecko"
3 "PCName"
4 "Firewall"
5 "Close"
我似乎无法让选项正常运行,我在想:
-
CMD 太简单,无法打开提示选择窗口。
我的代码未设置为在 ISE 之外运行
** 我很好,cmd 窗口只是文本而不是弹出窗口,我只是希望它能够工作。
任何帮助或提示将不胜感激。
【问题讨论】:
没有什么告诉它运行不止一次。您需要用while
循环将其包围,然后在您希望它结束时使用break
。
您不需要使用start /wait
来运行 PowerShell 命令或文件,下一个命令在该命令报告已完成之前不应运行。您是否希望 PowerShell 命令或文件在完全独立的控制台窗口中运行? 相对于 cmd.exe 窗口,您的批处理文件已经在其中运行。
【参考方案1】:
您当然可以直接在批处理文件中使用纯文本菜单,方法是使用内置的choice.exe 实用程序。
@Echo Off
:Menu
ClS
Echo 1. Edit IP
Echo 2. Change Introscreen
Echo 3. Replace Gecko
Echo 4. Host Name
Echo 5. Firewall
Echo 6. Close
%SystemRoot%\System32\choice.exe /C 123456 /M "What do you want to do"
GoTo Item%ERRORLEVEL%
:Item1
Echo Changing IP Address
%SystemRoot%\System32\timeout.exe /T 2 1>NUL
GoTo :Menu
:Item2
Echo Changing Introscreen
%SystemRoot%\System32\timeout.exe /T 2 1>NUL
GoTo :Menu
:Item3
Echo Changing Gecko Folder
%SystemRoot%\System32\timeout.exe /T 2 1>NUL
GoTo :Menu
:Item4
Echo Fixing Host Name
%SystemRoot%\System32\timeout.exe /T 2 1>NUL
GoTo :Menu
:Item5
Echo Fixing Firewall Setting
%SystemRoot%\System32\timeout.exe /T 2 1>NUL
GoTo :Menu
:Item6
Echo Exiting
%SystemRoot%\System32\timeout.exe /T 2 1>NUL
Exit /B
【讨论】:
【参考方案2】:正如你所说,你愿意使用batch-file
我决定发布一个选项。
如果您的选项是每个条目的单个命令(或者如果您愿意链接命令),您可以预设命令并使用 choice
选择选项。
注意!这里我添加了一些虚拟命令来演示它是如何工作的:
@echo off & cls
setlocal enabledelayedexpansion
set "sel="Edit IP","Change Introscreen","Replace Gecko",Hostname,Firewall,Close"
set "opt_1=ping localhost"
set "opt_2=echo something"
set "opt_3=echo Replace command here"
set "opt_4=hostname"
set "opt_5=echo firewall command here"
set "opt_6=exit /b"
:menu
set cnt=
for %%i in (%sel%) do (
set /a cnt+=1
echo !cnt!^) %%~i
set "_opt!cnt!=%%~i"
)
for /l %%c in (1,1,%cnt%) do set ch=!ch!%%c
choice /C %ch% /M "Enter Selection:"
echo You chose !_opt%errorlevel%!
!opt_%errorlevel%!
pause
set ch= & cls & goto :menu
【讨论】:
以上是关于在 CMD 中运行 PowerShell 脚本(带有弹出窗口)的主要内容,如果未能解决你的问题,请参考以下文章
powershell 使PowerShell脚本可以从任何地方运行(即CMD.EXE,Explorer,Run Dialog等)