在继续当前脚本的同时异步运行单独的PowerShell脚本

时间:2017-12-08 21:08:05

标签: powershell

PowerShell脚本#1执行以下操作:

Performs FTP ops ending with saving updated remote directory data in a local file

脚本快速运行,直到必须使用FTP获取远程目录数据。最好将远程目录数据检索删除到不同的PowerShell脚本#2中。

This SO post解释了从脚本中启动脚本。但在这种情况下似乎第一个脚本在第二个脚本执行时被暂停。

如何编写脚本#1以便脚本#2启动并被遗忘,脚本#1继续并快速完成,让脚本#2在后台完成。

2 个答案:

答案 0 :(得分:3)

您可以使用Start-Job启动PowerShell后台作业。这样,作业在不与当前会话交互的情况下运行,并在作业异步运行时立即返回。如果您希望从作业中收到结果,可以使用Receive-Job来获得结果。

示例

  • Start-Job -ScriptBlock {Get-Process}
  • Start-Job -Command "Get-Process"
  • Start-Job -FilePath "D:\script.ps1"

您还可以使用Start-Process启动其他流程。您可以指定程序可执行文件或脚本文件,也可以使用计算机上的程序打开该文件。当您开始处理非可执行文件时,与该文件类型关联的程序将像使用Invoke-Item cmdlet时一样运行。

示例

  • Start-Process PowerShell -Argument "C:\MyScript.ps1"
  • Start-Process "C:\SomeFile.txt"

答案 1 :(得分:0)

您将拥有一个包含多个功能的脚本。该脚本是标准的ps1脚本。这里的用例是您正在执行有效执行单个任务的代码块,您可以决定在脚本执行的哪个阶段执行哪些块:

Function Get-RemoteDirectory {

   <Insert shorter running operation here>

}

Function Pull-RemoteDirectory {

  Get-RemoteDirectory -Path <Path>

  <Insert longer running operation here>

}

Pull-RemoteDirectory -SourcePath <Path> -DestinationPath <Path>

这里我调用第二个函数中的第一个函数。您可以在此处插入脚本逻辑。关注variable scopes。一旦你的脚本准备就绪,只需保存文件并执行任何Powershell脚本。

NB。您可以在脚本和/或函数中添加param()块。根据脚本运行时的要求,满足您的需求。