2013-12-23 52 views
1

我有Powershell的以下代碼,我嘗試對mysql數據庫的最新備份文件進行排序,然後嘗試導入此文件 我正在使用PowerShell腳本直到最後一個腳本我得到所需的O/P,然後我複製這個O/P和執行分離 cmd窗口它執行順利,但在電源外殼,當我嘗試做同樣的事情失敗,以下錯誤請幫助我mysql的Powershell代碼不起作用

錯誤消息

C:\wamp\bin\mysql\mysql5.5.24\bin\mysql.exe --user=root --password=xxx testdest < "C:\mysqltemp\testsrc_2013-12-23_10-46-AM.sql" 
cmd.exe : The system cannot find the file specified. 
At C:\Users\IBM_ADMIN\AppData\Local\Temp\8a7b4576-97b2-42aa-a0eb-42bb934833a6.ps1:19 char:4 
+ cmd <<<< /c " "$pathtomysqldump" --user=$param1 --password=$param2 $param3 < $param5 " 
    + CategoryInfo   : NotSpecified: (The system cann...file specified.:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

腳本如下

##Select latest file created by Export of mysql dumper 
$a=(get-childitem C:\mysqltemp | sort LastWriteTime -Descending | Select-Object Name | select -first 1 -ExpandProperty Name) 
$pathtomysqldump = "C:\wamp\bin\mysql\mysql5.5.24\bin\mysql.exe" 
#Write-Host "Print variable A -------------"  
#$a 
$a=$a.Replace(" ", "") 
#Write-Host "After Triming ---------------" 
#$a 
$param1="root" 
$param2="xxx" 
$param3="testdest" 
#$param4="""'<'""" 
$param5="""C:\mysqltemp\$a""" 
#$p1="$param1 $param2 $param3 < $param5" 
# Invoke backup Command. /c forces the system to wait to do the backup 
Write-Host " "$pathtomysqldump" --user=$param1 --password=$param2 $param3 < $param5 " 

cmd /c " "$pathtomysqldump" --user=$param1 --password=$param2 $param3 < $param5 " 

謝謝並感謝您的幫助和時間。

回答

0

這是一個常見的誤解,涉及在Windows操作系統中調用命令行,特別是從PowerShell中調用命令行。

我強烈建議使用Start-Process cmdlet啓動一個進程,而不是調用cmd.exe。精神分析和理解可執行文件的路徑以及所有命令行參數是很容易的。當前腳本的問題在於,您嘗試使用以下名稱調用可執行文件:C:\wamp\bin\mysql\mysql5.5.24\bin\mysql.exe --user=root --password=xxx testdest < "C:\mysqltemp\testsrc_2013-12-23_10-46-AM.sql",該文件已被包裝在調用cmd.exe中。顯然,該文件不存在,因爲您將所有參數包含爲文件系統路徑的一部分。

這裏有太多的圖層,這使得它易於理解。相反,使用Start-Process類似於下面的例子:

# 1. Define path to mysql.exe 
$MySQL = "C:\wamp\bin\mysql\mysql5.5.24\bin\mysql.exe" 
# 2. Define some parameters 
$Param1 = 'value1'; 
$Param2 = 'value2'; 
$Param3 = 'value 3 with spaces'; 
# 3. Build the command line arguments 
# NOTE: Since the value of $Param3 has spaces in it, we must 
#  surround the value with double quotes in the command line 
$ArgumentList = '--user={0} --password={1} "{2}"' -f $Param1, $Param2, $Param3; 
Write-Host -Object "Arguments are: $ArgumentList"; 

# 4. Call Start-Process 
# NOTE: The -Wait parameter tells it to "wait" 
#  The -NoNewWindow parameter prevents a new window from popping up 
#   for the process. 
Start-Process -FilePath $MySQL -ArgumentList $ArgumentList -Wait -NoNewWindow; 
+0

非常感謝特雷弗您的迅速反應,我也跟你的觀點腳本同意是有點亂我是初學PS原諒我,我會確保實現你的方式來執行此腳本。 –