脚本块是一段可以被执行的PowerShell代码,我们通常是把脚本块放在闭合的大括弧中。若想在PowerShell中动态地创建脚本块,我们首先得知道如何将一段字符串转换成脚本块对象。
$scriptblock = [ScriptBlock]::Create('notepad')
先是字符串,然后转换成脚本块对象,再然后就可以将脚本块交给任何可以接受以脚本块为参数的PowerShell命令了,比如Invoke-Command:
Invoke-Command -ScriptBlock ([ScriptBlock]::Create('notepad'))
你可能会问,那我为什么不直接传递一个字符串呢?可不可以,搞一下不就知道啦:
PS> Invoke-Command -ScriptBlock 'notepad' Invoke-Command : 无法绑定参数“ScriptBlock”。无法将“System.String”类型的“notepad”值转换为“System.Management.Autom ation.ScriptBlock”类型。
如果你的脚本块本身就是静态的,直接这样即可:
$block = { Get-Date } Invoke-Command -ScriptBlock $block
如果你的脚本是动态的,比如来自用户输入,或着来自某个文件,再或者来自网络上一段字符串,那么[ScriptBlock]::Create() 首当其冲。
本文引用自:Create Dynamic Script Blocks
本文链接: https://www.pstips.net/create-dynamic-script-blocks.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
这个方法应该支持异步吧 ,某些地方确实需要。。
Invoke-Command -ScriptBlock $block -AsJob