首页 > 解决方案 > 使用单个主 ps1 运行多个 ps1 脚本

问题描述

我正在尝试为不同的操作多次运行 ps1 脚本,并且需要将结果输出到文本文件。

例子:

C:\Program Files\script folder> .\script.ps1 version 
C:\Program Files\script folder> .\script.ps1 status
etc

我有 15 个这样的命令可以按顺序运行。如何将所有这些整理到主 ps1 并按顺序运行并将结果输出到文本文件?


$scriptsList = 
@(
    'C:\Program Files\script folder> .\script.ps1 version ' >> C:\TEMP\output.txt
    'C:\Program Files\script folder> .\script.ps1 status' >> C:\TEMP\output.txt
)

for each($script in $scripts List)
{
   Start-Process -File Path "$PSHOME\powershell.exe" -Argument List "-command ' $script'" -Wait

}

输出文件不显示实际输出,而是在下面显示为文本文件中的输出。

C:\Program Files\script folder> .\script.ps1 version 
C:\Program Files\script folder> .\script.ps1 status

标签: powershell

解决方案


您可以使用Invoke-Expression来执行此操作。将所有命令放入master.ps1如下图-

Invoke-Expression "\\PathToYourScript\Script1.ps1"
Invoke-Expression "\\PathToYourScript\Script2.ps1"
Invoke-Expression "\\PathToYourScript\Script3.ps1"
Invoke-Expression "\\PathToYourScript\Script1.ps1"

这将导致脚本被顺序调用。

或者

Split-Path$MyInvocation自动变量一起使用。如果所有子脚本都在同一个文件夹中,那么您可以将其添加到您的master.ps1文件中 -

& ((Split-Path $MyInvocation.InvocationName) + "\Script1.ps1")
& ((Split-Path $MyInvocation.InvocationName) + "\Script2.ps1")
& ((Split-Path $MyInvocation.InvocationName) + "\Script3.ps1")

推荐阅读