此解决方案类似于walid2mi(感谢您的启发),但允许Read-Host cmdlet进行标准控制台输入。
优点:
可以像标准.cmd文件一样运行
批处理和Powershell脚本只有一个文件
powershell脚本可能是多行的(易于阅读的脚本)
允许标准控制台输入(以标准方式使用Read-Host cmdlet)
缺点:
需要Powershell 2.0+版本
batch-ps-script.cmd的已注释且可运行的示例:
@echo off
: Use local variables
setlocal
: Change current directory to script location - useful for including .ps1 files
cd %~dp0
: Invoke this file as powershell expression
powershell -executionpolicy remotesigned -Command "Invoke-Expression $([System.IO.File]::ReadAllText('%~f0'))"
: Restore environment variables present before setlocal and restore current directory
endlocal
: End batch - go to end of file
goto:eof
#>
# here start your powershell script
# example: include another .ps1 scripts (commented, for quick copy-paste and test run)
#. ".\anotherScript.ps1"
# example: standard input from console
$variableInput = Read-Host "Continue? [Y/N]"
if ($variableInput -ne "Y") {
Write-Host "Exit script..."
break
}
# example: call standard powershell command
Get-Item .
.cmd文件的代码段:
@echo off
setlocal
cd %~dp0
powershell -executionpolicy remotesigned -Command "Invoke-Expression $([System.IO.File]::ReadAllText('%~f0'))"
endlocal
goto:eof
#>
# here write your powershell commands...