Strange character error when running native cmdline app

Welcome Forums General PowerShell Q&A Strange character error when running native cmdline app

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

3 years, 12 months ago.

  • Author
  • #22057

    Points: 1
    Rank: Member


    I've been trying to produce just a simple script (pasted at bottom) which will run a native cmdline application (psftp) and which that native app will run using its own command script – a script also created by the powershell script. However I'm having a lot of difficulty with this and I don't understand why. I even put the native app and args in its own batch script (rsynctemp.bat) and had Powershell run that instead, to no avail. Every time I run the PS script it errors with the following:

    PS C:\Scripts> Download-Log Test
    C:\Users\ThisUser\rsynctemp.bat : 'þp' is not recognized as an internal or external command,
    At line:1 char:1
    + C:\Users\ThisUser\rsynctemp.bat
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: ('þp' is not rec...ternal command,:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
    operable program or batch file.

    It looks like when it is trying to execute the batch script (or the command by itself) Powershell is feeding it erroneous characters. Unless I missing some here-string gotchas that I'm not aware of, I don't really see anything particularly wrong with them.

    What's particularly interesting is that I can pop open the Powershell shell and test out the native app by running the rsynctemp.bat straight from the prompt and it'll work great. It's only when trying to do it from this script does it bug out.


    function Download-Log
            # Param1 help description
            [string]$Directory="$ENV:USERPROFILE\My Documents\Logs\"
            #Filenames for the scripts
            $TempCmdFile = "$ENV:USERPROFILE\rsync.tmp"
            $TempBatFile = "$ENV:USERPROFILE\rsynctemp.bat"
            #Create command script for psftp
            $TempCmd = @"
    lcd "$Directory"
    mget -r $($Device.ToUpper())
            #Create batch script to run psftp command
            $TempBat = @"
    psftp -pw APassword AServer -batch -bc -b $TempCmdFile
            #Slap the scripts into temporary files
            Out-File -FilePath $TempCmdFile -Force -InputObject $($TempCmd -join ' ') #replace newlines w/ spaces
            Out-File -FilePath $TempBatFile -Force -InputObject $TempBat
            #$ErrorActionPreference = "SilentlyContinue"
            Invoke-Expression -Command $TempBatFile
            #$ErrorActionPreference = "Stop"
            #Open window to logs directory
            explorer $Directory
            #Delete temp files
            Remove-Item $TempCmdFile
            Remove-Item $TempBatFile
  • #22058

    Points: 0
    Rank: Member

    Most command-line utilities don't handle Unicode, and that's the default encoding used by Out-File. Try adding -Encoding Ascii to all of those calls to Out-File.

  • #22130

    Points: 1
    Rank: Member

    Wonderful. I totally did not recognize the Unicode output. Thank you!

The topic ‘Strange character error when running native cmdline app’ is closed to new replies.

One thought on “Strange character error when running native cmdline app

  1. Pingback: PowerShell – PowerShell generated batch file results in error þ is not recognized as an internal or external command |

Comments are closed.