监视命令并等待它完成,然后再继续执行下一个命令?

时间:2017-05-17 13:56:09

标签: powershell

我编写了一个PowerShell脚本:

  1. 从目录中获取所有txt文件
  2. 对第一个文件执行逐行评估(抓取标题并附加,将数据附加到文件中的每一行,保存到输出文件)
  3. 用于后续文件,抓取正文(不包括标题),追加数据,然后添加到输出文件
  4. 问题在于使用Add-Content进程挂起,因此某些文件因为输出文件正在使用而无法写入。我添加了一个函数(基于StackExchange上各个地方的建议),它测试输出文件以确定它是否可用于读写。这似乎是一种蛮力的“蛮力”。方法

    有没有办法监控PowerShell启动的实际Add-Content进程,以确定它何时完成?或者是否有其他方法可以解释为编写代码而使用PowerShell中的进程控制命令?

    样品:

    function IsFileAccessible([String]$FullFileName) {
        [Boolean]$IsAccessible = $false
    
        try {
            [IO.File]::OpenWrite($FullFileName).Close();
            $IsAccessible = $true
        } catch {
            $IsAccessible = $false
        }
    
        return $IsAccessible
    }
    
    cd '[filepath]'
    del old_output.type
    $filearray = @()
    
    $files = Get-ChildItem '[filepath]' -Filter "*.txt"
    $outfile = 'new_output.type'
    
    for ($i=0; $i -lt $files.Count; $i++) {
        # Define variables
        $lastWriteTime = $files[$i].LastWriteTime
    
        # Define process steps for appending data    
        filter Add-Time {"$_$lastWriteTime"}
    
        if ($i -eq 0) {
            $lines = Get-Content $files[$i]
            for ($j=0;$j -lt $lines.Count; $j++) {
                if ($j -eq 0) {
                    $appended_txt = 'New_Header'
                    filter Add-Header{"$_$appended_txt"}
                    $lines[$j] | Add-Header | Add-Content $outfile
                } else {
                    $lines[$j] | Add-Time | Add-Content $outfile
                }
            }
        } else {
            do {
                $ErrorActionPreference = 'SilentlyContinue'
                $test = IsFileAccessible('[filepath-new_output.type]')
                echo 'file open'
            } until ($test -eq 'True')
    
            $ErrorActionPreference = 'Continue'
            echo 'okay'
            (Get-Content $files[$i].FullName | Select-Object -Skip 1) |
                Add-Time | Add-Content $outfile
        }
    }
    

0 个答案:

没有答案