Welcome Forums General PowerShell Q&A how to wait the process has been done before executing the next task

Viewing 2 reply threads
  • Author
    Posts
    • #166816
      Participant
      Topics: 1
      Replies: 1
      Points: 17
      Rank: Member

      hi, all,

      I am very new on the PowerShell, but about 20 years s/w development experience  mostly with .Net, and variety other lang including Javascript(Typescript), and little bit of Python or PERL. I am recently working as IT admin task.

      I have written the Powershell script(say, DownloadReplaceCharsCopy.ps1) which execute the PERL script with the following pesudo code, and all works each block of command, but when I execute DownloadReplaceCharsCopy.ps1 using the Window Task Schedule, the replacing Character part does  not do its job.

      ---- Code (simplified) DownloadReplaceCharsCopy.ps1---
      
      # Step 1. Find and set the input parameters for PERL script to download file from the remote server (omit some logic)
      
      $localFilename = 'c:\wf\localfile.txt'
      
      $remoteFilename = 'remotefile.txt'
      
      
      # Step 2. Execute PERL script which takes the local file name to store, and the remote file name to download
      
      perl.exe  c:\wf\my.pl  $remoteFilename   $localFilename
      
      
      
      # Step 3. Replace the Hex (1C) to Window CarriageReturn and LineFeed on the downloaded file
      
      $ModifiedFileName = $localFilename + "_" + $timestamp + ".txt"
      
      Get-Content $localFilename | Foreach-Object {$_ -replace "\x1c", "`r`n"} | set-content $ModifiedFileName -Force
      
      # Step 4. Copy to the backup folder the original file download and to move the final file to the destination folder (simplify the filename)
      
      Copy-Item -Path $localFilename-Destination  'c:\destination\backup.txt'
      
      Move-Item -Path $ModifiedFileName -Destination 'c:\destination\target.txt'
      

      *** Questions is below

      The step 3 to replace character does not work when it executes via Window Task Scheduler, which mean no replacement.

      But when execute one command by one command, all works fine.

      Appreciate any help/comment to resolve this in advance.

      from Moon 1

    • #166876
      Senior Moderator
      Topics: 8
      Replies: 1160
      Points: 4,055
      Helping Hand
      Rank: Community Hero

      is it ‘\x1C’ or just ‘1C’ for replace. Can you try $_ -replace “1c”, “`r`n”

      • #167737
        Participant
        Topics: 1
        Replies: 1
        Points: 17
        Rank: Member

        Thank you  for your feedback.

        Though, it is \x1c since it is hex. and that line itself (Get-Content $localFilename | Foreach-Object {$_ -replace “\x1c”, “`r`n”} | set-content $ModifiedFileName -Force) works as I expected when it is executed that line only.

        However, it takes a quite of time depending on the size of file to loop through, and does not work ‘Replacing character’ when it runs through Window Task Schedule in a way the original input file is save to $modifiedFileName…

         

    • #167824
      Moderator
      Topics: 3
      Replies: 109
      Points: 567
      Helping Hand
      Rank: Major Contributor

      This could be a permissions issue. In Windows Task Scheduler, is it your own user account that is set to execute the script, or is it a system or general user account? Does the WTS account have permission to execute your script, and does it have access to the necessary directories? (e.g. c:\wf\)

      You say that when you execute the commands one by one everything works fine, but not when the script is executed by WTS. What happens when you execute the whole script manually? does it still perform as expected? What happens if a different user executes the script?

Viewing 2 reply threads
  • The topic ‘how to wait the process has been done before executing the next task’ is closed to new replies.