powershell虽然也会有一些问题,但是相比bat功能更加丰富,尤其写一些比较复杂的功能用powershell比bat简单了不是一星半点儿。bat现在的优势是入门简单,然后就是用的人比较多,很多项目的windows端脚本(例如项目启动脚本)基本都是bat。
本篇着重介绍在编写powershell脚本时会遇到的各种问题,会持续更新。
命名问题
- powershell的文件路径中不能含有特殊符号,例如编写一个脚本另存为test(1).ps1,运行就会直接闪退,需要把英文括号改成中文,或者直接删除才可正常运行。
- powershell的函数命名可以包含“-”符号,变量命名可以包含“_”符号,如果搞混了运行就会直接闪退。
- powershell里面有各种保留关键字,例如input,如果把变量或者函数命名成这样,运行就会直接闪退。
编码问题
- powershell的脚本编码必须是“UTF-8 BOM”,如果使用UTF-8遇到中文会遇到解码问题,脚本运行出错。
- powershell的代码页(就是黑色的命令行界面)默认编码是ANSI,调用第三方exe很容易出现中文乱码,需要把代码页也更改成UTF-8编码。powershell更改代码页为UTF-8编码:“chcp 65001 > $null”。
代码问题
代码:
$a = 1 Write-Host $a + 1 pause运行结果:

代码:
$a = 1 Write-Host $($a + 1) pause运行结果:

代码:
$a = 1 $b = $a + 1 Write-Host $b pause运行结果:

代码:
$a = 1 Write-Host "$a是一个数字" pause运行结果:
此时“a是一个数字”整体被当成了变量名,因为没有此变量,所以仅输出一个换行符。代码:
$a = 1 Write-Host "$a 是一个数字" pause运行结果:
此时空格分隔出了变量a,所以能正常识别变量名。代码:
$a = 1 Write-Host "$($a)是一个数字" pause运行结果:
此时“$()”划分出了变量a,所以能正常识别变量名。
管道符问题
- powershell的管道符仅支持字符流,不支持传递二进制数据。如果需要传递二进制数据则需使用“cmd /c”。
调试问题
- powershell遇到代码语法性质的问题会直接闪退,如果语法错误在关键字“pause”之后,仍然会直接闪退,并不是按Enter继续运行才闪退。
各位如果觉得有用请点击下方的打赏,扫描二维码给我投币,创作不易,感谢支持!