2017-02-17 6 views
2

私はビデオファイルの長さを出力するpowershellスクリプトを持っています。このスクリプトを実行すると、期待通りの結果が得られます。Powershellはshell_execを使用してPHP変数に出力します

$Folder = 'C:\my\path\to\folder' 
$File = 'sample1_1280_720.mp4' 
$LengthColumn = 27 
$objShell = New-Object -ComObject Shell.Application 
$objFolder = $objShell.Namespace($Folder) 
$objFile = $objFolder.ParseName($File) 
$Length = $objFolder.GetDetailsOf($objFile, $LengthColumn) 
Write-Output $Length 

PHPファイルでは、この出力を変数に保存しようとしています。

shell_execから出力される文字列は、cmdからpowershellを起動したときに表示されるテキストです。 Windows PowerShell 著作権(C)2016 Microsoft Corporation。全著作権所有。ビデオ期間を抽出する方法に関する提案はありますか?

+1

何が '追加する場合-NoLogo'あなたのPowerShellコマンドに'もしくはshell_exec() 'になりますか? –

+0

"powershell -NoLogo -File ..." - 同じ出力を出力します – Thomas

+0

これは、 'shell_exec()'があなたが渡しているコマンドラインを処理する方法について何かが間違っていることを示唆しています。スクリプトにコードを追加して結果をファイルに出力すると、ファイルが作成され、期待通りの結果が得られますか? –

答えて

1

あなたのPSコードを使用して

$Folder = 'C:\my\path\to\folder' 
$File = 'sample1_1280_720.mp4' 
$LengthColumn = 27 
$objShell = New-Object -ComObject Shell.Application 
$objFolder = $objShell.Namespace($Folder) 
$objFile = $objFolder.ParseName($File) 
$Length = $objFolder.GetDetailsOf($objFile, $LengthColumn) 
$Length 

私はPS -File-Commandを使用してファイルの長さを取得することができますよ。あなたが望むかもしれない、あるいは必要とするいくつかのフラグを追加しました。 PSからPHPに変数を取得するには、リダイレクト2>&1を使用する必要はありません。あなたがロゴを手に入れている理由は、おそらくそうです。すべての3つの方法で$Lengthを返す

function PowerShellCommand($Command) 
{ 
    $unsanitized = sprintf('powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command "%s"', $Command); 

    return shell_exec($unsanitized); 
} 

function PowerShellFile($File) 
{ 
    $unsanitized = sprintf('powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Bypass -File "%s"', $File); 

    return shell_exec($unsanitized); 
} 

// Can use relative paths 
echo PowerShellCommand("./psFile.ps1"); 
// Be sure to escape Windows paths if needed 
echo PowerShellFile("C:\\my\\path\\to\\folder\\psFile.ps1"); 

は私のために働く

$Length 
return $Length 
Write-Output $length 
+0

優秀!これは、Windowsのパスと '-ExecutionPolicy Bypass'をエスケープして、それを通過させたものです。私はそれらを別々に試しましたが、一緒には試しませんありがとうございました :) – Thomas

関連する問題