使用单个主ps1运行多个ps1脚本

时间:2019-07-08 08:46:26

标签: powershell

我试图多次运行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

1 个答案:

答案 0 :(得分:0)

您可以使用Invoke-Expression来这样做。如下所示,将所有命令放在master.ps1中-

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

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

OR

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

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