0

リモートサーバーで md5 というアプリを起動するために psexec を実行する必要がある VB スクリプトがあります。Md5 はファイルのハッシュ キーを生成し、1 つのパラメーター (ファイル パス\名前) を取ります。変数に格納するために生成された has キーを取得する必要があります。以下は私が使用しているコードです:

Set objShell = CreateObject("Wscript.Shell")
strcomputer = "remotecomputer"
tempDest = "C:\somedir"
filename = "somefile"

strCommand = "psexec -accepteula \\" & strcomputer & " -c md5.exe " & tempDest & "\" & filename & " > log.txt"
Set objExecObject = objShell.Exec("%comspec% /c " & strCommand)
Do While objExecObject.Status <> 1 'loop until previous process has finished
WScript.Sleep 100
Loop

MD5 コマンドは実行されますが、ログ ファイルには何も書き込まれません。strCommand (すべての変数を実際のデータに置き換えます) をコマンド プロンプトにコピー アンド ペーストして実行すると、Md5 の出力がログ ファイルに正常に書き込まれます。

結局のところ、Md5 の出力が必要なだけです。ログ ファイルに書き込むよりも良い方法を知っている人がいたら教えてください。私はすでに objExecObject.StdOut.Readall() を使用して出力をキャッチしようと試みましたが、その結果、ランダムなエラーが発生しました。スクリプトを変更せずに、出力をキャッチすることもあれば、キャッチしないこともあります。

4

2 に答える 2

0

これに対する解決策を見つけました。次のコードを使用する代わりに:

strCommand = "psexec -accepteula \\" & strcomputer & " -c md5.exe " & tempDest & "\" & filename & " > log.txt"
Set objExecObject = objShell.Exec("%comspec% /c " & strCommand)
Do While objExecObject.Status <> 1 'loop until previous process has finished
WScript.Sleep 100
Loop

代わりにこれを使用しました:

strCommand = "psexec -accepteula \\" & strcomputer & " -c md5.exe " & tempDest & "\" & filename & " > log.txt"
objShell.Run "%comspec% /c " & strCommand, 0, true

スクリプトが log.txt に正しくリダイレ​​クトされるようになりました。

于 2009-10-28T03:19:08.383 に答える
0

ちょっとした推測: スクリプトが実行されているときの現在のディレクトリを確認できますか? ログ ファイルへの絶対パスを指定して、役立つかどうかを確認してください。

于 2009-10-27T06:43:06.680 に答える