如何从批处理文件中调用Powershell文件

时间:2013-10-24 06:51:10

标签: windows powershell batch-file

我想调用一个简单的Powershell脚本文件,它应该在ps脚本失败时返回0或1,或者分别从批处理文件传递。根据返回值,我想继续或退出。

以下说明了我尝试过的内容:

的startup.bat: -

@ECHO OFF
SET x = powershell C:\Users\saravind\Desktop\pingping.ps1
if "%x%" == 1 then (
    doSomething1
    ECHO Ran project 1
)

pingping.ps1: -

$someIP = '192.168.173.299'
$result = $true
try { Test-Connection $someIP -Source localhost -ErrorAction Stop }
catch { $result = $false }

我想要实现的是,在执行pingping.ps1时,如果它可以成功ping“192.168.173.299”,它应该返回一些值,比如1来调用它的批处理文件。如果ping失败,它应返回0,以便批处理文件不会继续'doSomething' 虽然pingping失败,但它继续使用我的代码doSomething。我的代码出了什么问题。

提前致谢。

2 个答案:

答案 0 :(得分:3)

以下对我有用,我使用0表示powershell脚本成功,1表示错误发生。

的startup.bat:

@echo off
powershell C:\Users\saravind\Desktop\pingping.ps1

if %errorlevel% equ 0 (
    doSomething1
    ECHO Ran project 1
)

pingping.ps1:

$someIP = '192.168.173.299'
try {
    Test-Connection $someIP -Source localhost -ErrorAction Stop
}
catch {
    exit 1
}
exit 0

答案 1 :(得分:1)

为什么不测试'ping'是否成功?

你的ps1文件应该是:

$someIP = '192.168.173.299'
it ( Test-Connection $someIP )
{ 1 }
Else
{ 0 }

您的批处理文件应为:

@echo off
FOR /f  %%i IN ('powershell -noprofile C:\Users\saravind\Desktop\pingping.ps1') DO set x=%%i
if "%x%" == 1 (
doSomething1
@echo  Ran project 1
)