2016-09-26 6 views
1

リモートディスクスペースを取得し、これをPostgre DBのテーブルに保存するPowerShellスクリプトがあります。exec( 'script.ps1')がエラーを返します。cmd> scrtipt.ps1が成功します。

Windowsのコマンドでコマンドを実行すると、成功して実行されます。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File C:\xampp\....\skripts\getDiskSpace.ps1 -Command -arg 192.168.178.178 

しかし、私はPHPのexecの()関数を使用する場合、私はPHPにescapeshellarg()関数のexecの$出力は()NULLで使用している場合、私は

exec("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -File C:\\xampp\\....\\skripts\\getDiskSpace.ps1 -Command -arg 192.168.178.178", $output); 

ODBCエラーが出ます


$出力の内容は次のとおりです。

[Microsoft]の[ODBCドライバマネージャ]が見つかりませんデータソース名なし デフォルトのドライバは、私はなぜ知らない

を指定し、私は

$conn = New-Object System.Data.Odbc.OdbcConnection 
$conn.ConnectionString = "Driver={PostgreSQL Unicode(x64)};Server=$dbServer;Port=5432;Database=$dbName;Uid=$dbUser;Pwd=$dbPass;" 

PostgreSQLのx64のODBCとODBCドライバを指定しますドライバがインストールされています!

は、このような誰かの問題を抱えている:

私は、Windows 2008 SP2 Enterprise Server上で動作する

......(... DバックLinuxのWebサーバを取得したいですか)?または解決策を知っていますか?

答えて

0

ここでは、PHPが実際のPowershellを動的に取得して対話できるようにするプロジェクトがあります。ここでそれを取得します。

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

$strCmd1 = 'get-WmiObject win32_logicaldisk'; 
$return1 = $shellObj->exeCmd($strCmd1); 

リターンはあなたがコンソールに座っているかのように、あなたのPowerShellからコマンド・リターンまたはエラーを与える:あなたは、単に次のコードを使用しますダウンロードした後https://github.com/merlinthemagic/MTS

を。その後、PHPで解析して挿入します。

さらに、$ shellObjに対して好きなコマンドを実行することができます。環境はPHPスクリプトの全期間を通じて維持されます。したがって、スクリプトファイルでコマンドを束ねるのではなく、exeCmd()メソッドを使って1つずつ発行するだけで、リターンと例外を処理することもできます。

関連する問題