以前听过 Powershell 但是也没有去仔细关注. 最近同事在尝试用 batch 批处理写一个 服务端自动编译脚本 (AutoBuild) 时遇到一此很奇怪不能解释的现象之后 果断用了 PowerShell 然后我就发现 Powershell 的确比较适合做这一类的任务. 首先语法强大, 是一种完整的编程语言, 而不像批处理 (*.bat) 弄一个循环都得借助很难用的 for 命令. 在批处理里, 语法不灵活, 很死板, 特别是 if 命令. 在 Powershell 里, 有函数的概念, 而在 批处理里, 只能通过 call :label (标号跳转) 的方式来模拟函数的实现.
当然也可以通过 VBScript for Windows Script Host (WSH) 来写脚本, VBScript 也是一门完整的语言, 但是本身命令支持的比较少, 而且需要通过 cscript.exe 或 wscript.exe 来解释, 性能比较低. 动不动就得通过 CreateObject 命令来调用外部COM程序. 连运行一个外部命令都得这样 (e.g. WScript.Shell 对象有一个 Run 方法)
在 PowerShell 里, 可以调用 .NET 库, 也可以很简单的创建 COM 对象, 比如以下两行就可以实现:
<# Example: Create COM object in PowerShell https://HelloACM.com #> # create COM object WScript.Shell $WSH = New-Object -ComObject "WScript.Shell" $WSH.Popup("Hello from PowerShell!")
和其它语言类似, 单行注释用#符号 多行注释则用 <# . #>. 而多行注释在批处理和VBScript 里是没有的.
创建一个函数也很简单快捷:
<# Example: Create COM object in PowerShell https://HelloACM.com #> function sayHello($msg) { $WSH = New-Object -ComObject "WScript.Shell" $WSH.Popup("Hello $msg") } sayHello("Zhihua!")
可以直接和PHP一样, 把参数放在双引号里而不用字符串联接. 如果用了单引号, 字符串里的变量值就不会被取代. 但可以通过加号来实现字符串相联.比如:
function sayHello($msg) { $WSH = New-Object -ComObject "WScript.Shell" $WSH.Popup("Hello " + $msg) # 这里用单引号也是可以的 }
英文: https://helloacm.com/powershell-tutorial-create-com-object/
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK