2017-02-17 3 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을 사용할 필요가 없습니다. 그것은 당신이 로고를 얻는 이유 일 가능성이 큽니다. 세 가지 방법으로 $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