在 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怎么运行

从CMD文件运行PowerShell脚本 - 参数类型出错

powershell 使PowerShell脚本可以从任何地方运行(即CMD.EXE,Explorer,Run Dialog等)

路径中的.cmd与.ps1

运行 Cmd.exe 后 Powershell 不会退出

如何运行PowerShell的脚本文件