2017-05-09 16 views
0

リンククローンを処理するための特定の権限をユーザに与えるための小さなウェブインタフェースを構築したいと考えています。 Webサーバー(IISを実行するWindows Datacenter 2008 R2)で、PowerCLIをインストールしました。このウェブサイトは自分のユーザーアカウント(ドメイン管理者)の下で実行され、権限の問題を排除します。PHPからPowerCLIスクリプトを呼び出す

私のPHPファイルには、次のようになります。\program files (x86)は問題で私を悩まままとして

$PowerCliCommand="C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\powershell.exe -PSConsoleFile \"C:\\Progra~2\\VMware\\Infrastructure\\vSphere PowerCLI\\vim.psc1\" -file C:\inetpub\lcmgmt\listlcs.ps1"; 
echo $PowerCliCommand . "<br>"; 
exec($PowerCliCommand, $Output, $ErrorReturned); 
echo "<pre>"; 
print_r($Output); 

print_r($ErrorReturned); 
echo "</pre>"; 

私は、\progra~2からConsoleFileのを呼び出します。

次のように私のブラウザでPHPの出力は次のとおりです。

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -PSConsoleFile C:\Progra~2\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -file C:\inetpub\lcmgmt\listlcs.ps1 
Array 
( 
    [0] => Connect-VIserver : The term 'Connect-VIserver' is not recognized as 
> the name of 
    [1] => a cmdlet, function, script file, or operable program. Check the spelling of th 
    [2] => e name, or if a path was included, verify that the path is correct and try agai 
    [3] => n. 
    [4] => At C:\inetpub\lcmgmt\listlcs.ps1:4 char:2 
    [5] => + Connect-VIserver -server "MyVSserver" 

と呼ばれるPowerShellスクリプトは次のようになります。私のPHP出力の(最初の行の完全なコマンドを呼び出すとき

Connect-VIserver -server "MyVSserver" 
$VDICluster=get-cluster -Name "MyCluster" 
get-vm -location $VDICluster -name "Server*" 

私のアカウント(IISで使用されているアカウントと同じ)で動作しているWebサーバーのコマンドプロンプトから、すべて正常に動作し、リンクされたクローンに関する情報が得られます。 ブラウザの出力から、PowerCLIコマンドが不明であることが報告されています。 私は完全に失われています、誰もこれについての経験がありますか?

+0

"IISで使用されているのと同じアカウント"ですか?通常のユーザーアカウントでdeamonを操作するということですか? – arkascha

+0

これは 'PATH'環境変数の問題のようです。 – arkascha

+0

はい、私は個人的なドメイン管理アカウントの下でIIS Webサイトを使用して、許可の制限を排除するためにテストを行います(純粋にテストとして、専用のサービスアカウントを作成します)。 ここでパスがどのようになっているのかわかりません。呼び出されたすべてのファイルのフルパスを指定します。 –

答えて

1

VMware PowerCLIインストーラは、PowerShellの読み込み時に$ Env:PSModulePathを設定するために使用されるユーザー/マシン環境変数に正しく追加されていないようです。ここに格納されているパスは、PowerShellがモジュールを探す場所を決定し、cmdletオートローディングを助けます。セッションをまたいで持続する方法で、あなたは次のことを実行することができ、これを解決するには

:あなたはここを参照してくださいしたいと

$Current = [Environment]::GetEnvironmentVariable('PSModulePath','Machine') 
$Current += ';C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules' 
[Environment]::SetEnvironmentVariable('PSModulePath',$Current,'Machine') 

ザ・は、システム全体のレベルでPSModulePathの既存のコンテンツを取得します。

enter image description here

VMware PowerCLIモジュールのパスを追加し、最後にSetEnvironmentVariableメソッドを呼び出して設定します。

+0

Env変数を変更するように提案したPS1スクリプトを実行しました。 ただし、Env変数は変更されていません。 私のPS1スクリプトは次のようになります: '$ Current = [Environment] :: GetEnvironmentVariable( 'PSModulePath'、 'Machine') $ Current + = '; C:\ Program Files(x86)\ VMware \ Infrastructure \ vSphere PowerCLI \モジュール ' C:\ Windows \ system32 \ WindowsPowerShell \ v1.0 \ [Environment] :: SetEnvironmentVariable(' PSModulePath '、$ Current、' Machine ') 書き込みホスト($ env:psmodulepath) Modules \ –

+0

私は言及すべきです - これは一度だけ、PowerShellを管理者として昇格させて実行する必要があります。 PowerCLIスクリプトで、最後の行だけが出力されている場合は、最初の行 '$ env:PSModulePath = $ env:PSModulePath + '; C:\ Program Files(x86)\ VMware \ Infrastructure \ vSphere PowerCLI \ Modules '' - 私たちはPS1スクリプトにこの形式の行を使用して、通常の領域の外に存在するカスタムモジュールの場所を追加し、うまく動作します。これを超えて、私はそれがサーバーOS/IIS/WMFのバージョンと関係があると考えることができます...(できるだけWMFをアップグレードしてください)。 – Robin

+0

高性能powershellからパス拡張コマンドを実行しても、Web出力で何も変更されませんでした。 '$ env:PSModulePath = $ env:PSModulePath + '; C:¥Program Files(x86)¥VMware¥Infrastructure¥vSphere PowerCLI¥Modules''をスクリプトに追加すると、すべての問題が解決されました。 PHPからPowerCliコマンドを実行できるようになりました。 ありがとうございました! –

関連する問題