【问题标题】:Batch script wont return after powershell call批处理脚本在powershell调用后不会返回
【发布时间】:2012-08-03 20:12:51
【问题描述】:

我正在编写一个批处理脚本,它多次调用 powershell 脚本来执行一些操作。
我已经分别测试了这两个脚本,它们都产生了我想要的结果,但是当我将它们结合起来时,powershell 脚本会挂起。我相信问题出在我有一个 php 脚本,它将值传递给批处理文件,然后根据该信息调用不同的 powershell 脚本。

我的 Batch 脚本进行了这个调用:

echo Setting Up Database
powershell -noninteractive -File ".\setupDB.ps1 " %1 > nul
echo Done!

我的 powershell 脚本如下所示:

$tempname = #$args[0]
$dbname = "cw_" + $tempname

[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
$dbusername = "username"
$dbpassword = "password"

echo "Creating connection to server"

$connStr ="server="myserver";Persist Security Info=false;user id=" + $dbusername + ";pwd=" + $dbpassword + ";"
$conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
echo "Done"

$conn.Open()

if($conn.State -eq "Open")
{
echo "Connection open"
}

$cmd = New-Object MySql.Data.MySqlClient.MySqlCommand
$cmd.Connection  = $conn
$cmd.CommandText = "DROP DATABASE IF EXISTS " + $dbname
$cmd.ExecuteNonQuery()

$cmd.CommandText = 'CREATE DATABASE `' + $dbname + '`'
$cmd.ExecuteNonQuery()

$conn.Close()
if($conn.State -eq "closed") {
echo "closed connection"
}
exit

当我将 powershell 脚本的结果通过管道传输到文件时,我可以追踪到整个脚本以我预期的方式运行,但是之后它不会返回到我的批处理脚本以继续运行我的其余脚本。 任何帮助将不胜感激。

【问题讨论】:

  • 您可以在 PHP 中完成所有这些工作,并省去试图让 Powershell 和 PHP 合作的麻烦。

标签: php sql powershell batch-file


【解决方案1】:
echo Setting Up Database
CALL powershell -noninteractive -File ".\setupDB.ps1 " %1 > nul
echo Done!

试试这个。 call 语句将 PowerShell 作为子进程启动,并在完成后将控制权返回给原始脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2014-10-14
    • 2011-05-22
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多