次のコードを実装しました。
$ServiceName = $_GET['Service'];
exec("echo . | powershell.exe -c get-service ".$ServiceName,$OutputArray);
echo "<pre>";
print_r($OutputArray);
echo "</pre>";
My$ServiceName
は get によって割り当てられますが、この例では .
$_GET['Service'] = "WinRM"; // Service Name is assigned to WinRM For *Windows Remote Management*
今..このスクリプトを実行すると、次のようになります。
Array
(
[0] => Get-Service : Cannot find any service with service name 'WinRM'.
[1] => At line:1 char:12
[2] => + get-service <<<< WinRM
[3] => + CategoryInfo : ObjectNotFound: (WinRM:String) [Get-Service], Se
[4] => rviceCommandException
[5] => + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.
[6] => Commands.GetServiceCommand
[7] =>
)
ここで、Powershell を開いて、次のコマンドを実行します。
get-service WinRM
次の出力が返されます。
PS C:\Users\Administrator> get-service WinRM
Status Name DisplayName
------ ---- -----------
Running WinRM Windows Remote Management (WS-Manag...
これは、次のような他のいくつかのサービス名で発生します。
$Array = array(
"DNSServer" => "DNS",
"DHCP Client" => "DHCP",
"Web Server" => "IISADMIN",
"Windows Remote Management" => "WinRM"
);
これはこの例では失敗しDNS, IISADMIN, WinRM
ます...しかし、PSからは次のように返されます:
PS C:\Users\Administrator> get-service DNS,IISADMIN,WinRM
Status Name DisplayName
------ ---- -----------
Running DNS DNS Server
Running IISADMIN IIS Admin Service
Running WinRM Windows Remote Management (WS-Manag...
私の全体的な質問は、Powershell から PHP へのレポートを改善し、両端から正確な結果を得る方法です。
これは、サービス名によっては成功する場合もあります。例えば:
$ServiceName = "DHCP";
-- これが、この Name がエラー デバッグに含まれていない理由です。次のように返されます。
Array
(
[0] =>
[1] => Status Name DisplayName
[2] => ------ ---- -----------
[3] => Running DHCP DHCP Client
[4] =>
[5] =>
)
これは私が探しているものです。