我试图多次运行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
答案 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")