2013-10-24 108 views
2

我想調用一個簡單的Powershell腳本文件,該文件在ps腳本失敗或從批處理文件分別傳遞時應返回0或1。根據回報值,我想繼續下去或退出。如何從批處理文件中調用Powershell文件

下面說明了什麼我已經嘗試了:

的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' 雖然ping不通,但它會繼續處理doSomething與我的代碼。我的代碼有什麼問題。

在此先感謝。

+0

這是一個重複的問題。 檢查一:http://stackoverflow.com/questions/6180572/execute-powershell-script-inside-batch-file – Rami

+0

我認爲這不是重複的。在那裏他說ps1文件確實存在。而他只是試着執行一次powershell聲明。 – a4aravind

+0

看看這裏:http://stackoverflow.com/questions/932291/calling-powershell-cmdlets-from-windows-batch-file – Rami

回答

3

對我來說,followign作品,我用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

爲什麼不測試'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 
) 
+0

非常感謝@CB,但在兩種情況下(對於1 &o),doSomething正在執行。 – a4aravind

+0

@ user2234700 oops ..在if語句後刪除'then' ..已經修復它在我的答案..現在嘗試。 –

相關問題