Powershell script gets stuck, doesn't exit when called from batch file

前端 未结 10 576
不知归路
不知归路 2020-12-24 11:08

I have a PowerShell script that connects to a web site, and parses its returned data (It\'s about importing a previously uploaded SQL file into the web site\'s data base). T

相关标签:
10条回答
  • 2020-12-24 11:52

    Try adding the /WAIT parameter. It will keep the .bat waiting until the PowerShell script completes.

    START /WAIT powershell "& "C:\data\etc\run_import_script.ps1"
    
    0 讨论(0)
  • 2020-12-24 11:54

    This variant might work for you.

    powershell -NoProfile -Command "C:\data\etc\run_import_script.ps1; exit $LASTEXITCODE" < NUL
    

    Taken from http://thepowershellguy.com/blogs/posh/archive/2008/05/20/hey-powershell-guy-how-can-i-run-a-powershell-script-from-cmd-exe-and-return-an-errorlevel.aspx

    0 讨论(0)
  • 2020-12-24 11:58

    PowerShell has, at least what I consider, strange behavior when being invoked in this manner. In short, it doesn't treat the command line arguments being passed to powershell.exe as scripts to run. Instead, it treats them as command to run. This is because the default for powershell.exe is -command - see powershell.exe /? for additional info.

    C:\>powershell "'Hello'"
    Hello
    

    What you will need to do, is construct a clever input string to "source" the script you wish to run:

    C:\>powershell ". .\test.ps1"
    Hello, World!
    

    As for the output, once you get the script running correctly, it should just be a matter of capturing STDOUT or whatever ends up fitting with your script.

    Full Example

    test.bat

    @echo off
    powershell.exe ". .\test.ps1"
    

    test.ps1

    "Hello, World!"
    

    Invoke the command:

    test.bat > test.txt
    

    And verify the output was captured:

    C:\>type test.txt
    Hello, World!
    
    0 讨论(0)
  • 2020-12-24 11:59

    We had a similar issue. We wanted to call a powershell app from a piece of software that just had a box to enter "Command" and "Parameters" but although the powershell ran successfully (I could see the affected file updated.)

    Finally my coworker helped me figure it out Command needs to be:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
    

    And Parameters:

    -ExecutionPolicy unrestricted -Command "& {C:\scripts\apps\EDI\Test.ps1; [Environment]::Exit(1)}"
    

    In our case it was important to use [Environment]::Exit(1) rather than Exit 1. I believe Exit was simply terminating the script, not closing Powershell itself.

    0 讨论(0)
提交回复
热议问题