![如何从另一个.ps1 文件执行.ps1?](https://linux22.com/image/1441880/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%8F%A6%E4%B8%80%E4%B8%AA.ps1%20%E6%96%87%E4%BB%B6%E6%89%A7%E8%A1%8C.ps1%EF%BC%9F.png)
我有两个 PowerShell 文件。a.ps1 和 b.ps1。
我想在 a.ps1 的中心点开始执行 b.ps1 中的代码并终止 a.ps1 脚本。
考虑到两个文件位于同一文件夹中,该怎么做?
答案1
如果在新的 Power Shell 进程中执行 b.ps1 可以吗?如果可以,则以下内容应按您描述的方式执行。
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))
“Invoke-Expression” 在同一进程中执行,但等待 b.ps1 终止。
答案2
在 a.ps1 中,
& .\b.ps1
调用其他程序的方式
答案3
使用魔法变量 $PSScriptRoot 来引用当前目录。然后使用 & 符号(“调用运算符”)调用脚本 B:
$script = $PSScriptRoot+"\b.ps1"
& $script
如果要将 B 中的变量保留在 A 的范围内,则可以使用 Dot 源运算符运行脚本:
$script = $PSScriptRoot+"\b.ps1"
. $script
答案4
我从另一篇文章中得到这个,但它可以在这里应用:谢谢(https://stackoverflow.com/users/3905079/briantist)
首先,如果您想在单个会话中对远程计算机进行多次调用,请首先创建一个 PSSession:
$session = New-PSSession -ComputerName $ComputerName
然后在所有后续调用中使用该会话:
Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code
完成后关闭会话:
Remove-PSSession -Session $session
另外如果你不知道脚本的具体内容但知道脚本从哪里开始,你可以这样做:
$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)
(那是我的)