how to wait the process has been done before executing the next task

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

This topic contains 3 replies, has 3 voices, and was last updated by

 
Participant
1 month, 3 weeks ago.

  • 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: 1041
    Points: 3,440
    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

    Participant
    Topics: 2
    Replies: 54
    Points: 278
    Helping Hand
    Rank: 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?

You must be logged in to reply to this topic.