【问题标题】:Run multiple ps1 scripts using single master ps1使用单个主 ps1 运行多个 ps1 脚本
【发布时间】:2019-07-08 16:57:05
【问题描述】:

我正在尝试多次运行不同操作的 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


    【解决方案1】:

    您可以使用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")
    

    【讨论】:

    • "Invoke-Expression "C:\Program Files\Illumio\illumio-ven-ctl.ps1 version" --> Invoke-Expression "C:\Program Files\Illumio\illumio-ven-ctl.ps1 version" 你有多余的双引号。
    • @user11753358 - 如果上述解决方案解决了您的问题,请检查tick 标记并将答案标记为可接受的工作解决方案。将来可能会对其他人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多