2015-11-19 1 views
0

Je suis un peu nouveau à la fois PHP et Powershell. J'ai créé un site Web pour exécuter un script PowerShell, qui vérifie le répertoire de plusieurs serveurs et renvoie les éléments de ce répertoire. Sur le site Web, ils s'affichent dans un tableau de données organisé.Powershell Script Sorties vides lorsqu'il est exécuté sur PHP

Mon problème est que lorsque php exec() appelle le script, il s'exécute mais la sortie de données est vide. Pourquoi cela se produit-il lorsque php exécute le script?

Voici le fichier powershell. J'ai même ajouté quelques sessions d'accréditation, pensant que cela devait être un problème d'identification.

Remove-PSDrive target: -ErrorAction SilentlyContinue 
    $global:username = "domain\user" 
    $global:password = ConvertTo-SecureString –String "MyPassword" –AsPlainText -Force 
    $global:cred = new-object -typename  System.Management.Automation.PSCredential -argumentlist $global:username, $global:password 


    $output_Table = @() 
    $today = get-date 
    $html_output [email protected]() 
    [email protected]() 


    New-PSDrive -Name target -PSProvider FileSystem -Credential $global:cred -Root "\\serverName\filedir" | Out-Null 
$tableData+= '<table><tr><th>First Feed</th><th>Updates:DAILY</th></tr> <tr><th>FileName</th><th>FileDate</th></tr>' 
foreach ($file in (ls target:)) 
{GetFeed(-7)} 
$tableData +='</table>' 
Remove-PSDrive -Name target -Force 


$html_output += $tableData 
$html_output += '</div>' 

$html_output | Out-File "C:\xampp\htdocs\script_results.txt" -Encoding utf8 
$today | Out-file "C:\xampp\htdocs\script_TimeStamp.txt" -Encoding utf8 

Le script_result.txt contient les fichiers avec les balises HTML. PHP lira plus tard ceci et l'enverra dans la page html.

Le code PHP qui appelle ce script est le suivant.

<?php 
    if(isset($_POST['submit'])){ 

    set_time_limit (300); 
    $output = array(); 
    $return_code = 0; 
    $last_line = exec('powershell.exe C:\xampp\htdocs\script.ps1 2>&1 ', $output, $return_code); 

    } ?> 

plus tard il y a cette pièce de code pour afficher les résultats. Encore une fois, si je lance moi-même le script powershell, il renvoie le script_result avec la sortie désirée. Si PHP l'exécute, le script s'exécute, mais la sortie ne contient aucune donnée de fichier.

À quoi est-ce dû?

+0

peut-être un problème de permission. L'utilisateur php fonctionne devrait avoir les permissions pour faire ce que vous voulez. – steven

+0

Quand je le teste, je regarde mon gestionnaire de tâches. Je vois le powershell.exe apparaître avec mon nom d'utilisateur dessus. : / –

Répondre

0

Voici un projet qui permet à PHP d'obtenir et d'interagir dynamiquement avec un véritable Powershell. Obtenez ici: https://github.com/merlinthemagic/MTS

Après téléchargement souhaitez simplement utiliser le code suivant:

$shellObj = \MTS\Factories::getDevices()->getLocalHost()->getShell('powershell'); 

$strCmd1 = 'Remove-PSDrive target: -ErrorAction SilentlyContinue'; 
$return1 = $shellObj->exeCmd($strCmd1); 

$strCmd2 = '$global:username = "domain\user"'; 
$return2 = $shellObj->exeCmd($strCmd2); 

//etc, etc 

De cette façon, vous pouvez émettre chaque commande et gérer le retour, si elle est un problème d'autorisations de la commande qui échoue volonté renvoie le message d'erreur de Powershell. Vous pouvez émettre n'importe quelle commande contre le $ shellObj, l'environnement est maintenu tout au long de la vie du script PHP.