首先,要小心>
如果您的數據庫轉儲不需要在Unicode中,而是ASCII。您將使用| out-file $filepath -enc ascii
來確保它使用ASCII編碼進行寫入。 (我的數據庫是latin1的。如果我使用PowerShell的>
轉儲文件的兩倍時使用>
正常控制檯傾倒一樣大。)
這就是說,我把它轉儲到ASCII格式的文件,放在一個變量中的錯誤以這種方式(由一味以一個不存在的數據庫迫使一個錯誤,但mysqldump的它拋出錯誤之前,輸出了一批轉儲初始化線):
$err = (mysqldump -uroot -p --databases nonexistent | out-file C:\backup.sql -enc ascii) 2>&1
這包執行所以stdout被傳送到out-file
,但是在包裝之後,stderr被重定向到stdout,以便它可以被分配到變量le $ err。
$err
是1 ErrorRecord
或更多。一個錯誤的TargetObject
屬性包含原始stderr輸出。這裏的每一個錯誤字符串打印到控制檯的演示:
if ($err -is [system.array]) {
$err | % { write-host $_.TargetObject }
} else {
write-host $err.TargetObject
}
或者,你可以確保$err
是由它環繞的@()
(好主意,邁克)略微修改原始轉儲聲明數組:
$err = @((mysqldump -uroot -p --databases nonexistent | out-file C:\backup.sql -enc ascii) 2>&1)
難道你不能使用@()而不是$()使$ err成爲一個數組嗎?這將消除if/else的需要。 – 2011-06-01 18:51:35
非常感謝!我用'$(&「$ MySQLDumpPath」...'取代了'$(mysqldump ...)',並且做了訣竅。 – Frank 2011-06-01 18:56:19
@Frank:好的,我可以像我一樣調用我的,因爲MySQL的'bin'路徑是我的'PATH'環境變量的一部分,你也可以把你的整個調用放在一個像$ mdump =「$ MySQLDumpPath --arg1 --arg2」'這樣的字符串變量中,並用'iex $ mdump'執行。 – 2011-06-01 19:22:25