我过去使用过很多脚本语言,现在正在学习PowerShell.在这些其他语言中,我通常在定义函数之前定义我的主要逻辑,因此阅读代码的人将首先关注主逻辑.这通常采用在文件顶部创建"主"函数或类的形式,并在底部调用它.
在PowerShell中,此模式可能如下所示:
$main = {
...
do-something
...
}
function do-something() {
<function definition here>
}
& $main
Run Code Online (Sandbox Code Playgroud)
这很好用,但我现在想利用PowerShell远程运行代码的能力.既然$main是PowerShell ScriptBlock对象,我[想我]可以在这样的远程机器上运行该代码:
Invoke-Command -ScriptBlock $main -ComputerName whatever;
Run Code Online (Sandbox Code Playgroud)
但是,远程机器对我的功能一无所知,因为它的定义超出了范围$main.当然,我可以将函数的定义移到$ main中,但是我必须把它放在主逻辑之上,我才回到第一个问题.
是否存在编写PowerShell脚本的通用模式,其中主逻辑位于文件顶部的函数或脚本块中,类似于许多传统语言?人们如何编写复杂的脚本 - 他们是否总是从上到下编写它们,根据需要在顶部填充函数?
有人将此标记为问题的可能副本为什么我需要首先在我的Powershell脚本中编写函数?.这不是重复的.我知道为什么需要首先定义函数 - 我一直在编程,因为C是很酷的新语言.
我要求的是在poweshell中这样做的模式,特别是在希望能够远程运行主代码的情况下.
是否存在将main块放在powershell脚本顶部的通用模式?Powershell语法和习语与更传统的语言,甚至是许多流行的现代脚本语言都有很大的不同,将主要逻辑移到顶端的模式并不明显(或者可能是这样,但我还没有找到正确的例子)或文件)
如果你想仿效PowerShell中的"传统"的结构,要做到这一点的方法之一是使用Begin,Process和End关键字.
这些可以在脚本中以任何顺序出现,但是Begin块将始终首先运行,因此您可以将其放在脚本的底部,并将函数定义放在那里,并将主逻辑放在脚本的顶部Process或End阻止.
脚本从顶部到底部读取,因此在启动之前不能使用任何引用.但是,您可以创建一个脚本/脚本块来模拟编程语言的工作方式.
在像c#这样的编程语言中,该main部分是一个函数.当应用程序完成加载必要的部分(如核心功能等),并且事件处理程序调用主函数以启动聚会.使用下面的方法,您将模拟相同的行为.
要使用它invoke-command,只需将上面的示例包装在新的scriptblock中并使用它.
$script = {
#Main-function
function main {
#starting helper function
helper-func
}
#Helpers
function helper-func {
Write-host "foo"
}
#Entry point
main
}
Invoke-Command -ComputerName mycomputer -Scriptblock $script
Run Code Online (Sandbox Code Playgroud)
或者将其保存到文件中,并以这种方式调用它.
Script.ps1
#Main-function
function main {
#starting helper function
helper-func
}
#Helpers
function helper-func {
Write-host "foo"
}
#Entry point
main
Run Code Online (Sandbox Code Playgroud)
用法:
Invoke-Command -ComputerName mycomputer -FilePath '.\Script.ps1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21141 次 |
| 最近记录: |