質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

16028閲覧

JP1経由でPowerShellを実行した際にIISのコマンドでエラーが発生する(手動では発生しない)

hetare_SE

総合スコア27

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2016/07/13 10:52

編集2016/07/14 01:06

###前提・実現したいこと
PowerShellウィンドウで実行した際は問題ないが
JP1経由からPowerShellを実行した際にエラーが発生するため質問いたします。
JP1からは「PCジョブ」を使って実行しています。

JP1PCジョブ → 対象サーバのPowerShellスクリプト実行

今回のケース以外では特に問題なくJP1→PowerShellが出来ています。
該当PowerShellはWindowsのIISの設定を行うスクリプトです。

###発生している問題・エラーメッセージ

・PowerShellウィンドウ(プロンプト)にて実行した場合 エラーも出ず想定通りの処理を行います。 ・JP1経由で実行した場合 下記エラーが標準出力されます。 CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} を含む コンポーネントの COM クラス ファクトリを取得中に、次の エラーが発生しました : 80040154 クラスが登録されていません (HRESULT からの例 外:0x80040154 (REGDB_E_CLASSNOTREG))。 イベントログ(アプリケーションとサービスログ\Microsoft\windows\PowerShell\operational)に出力された内容も記載しておきます。 -------------------------------------------- エラー メッセージ = CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80040154 クラスが登録されていません (HRESULT からの例外:0x80040154 (REGDB_E_CLASSNOTREG))。 完全修飾エラー ID = System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.GetConfigurationCommand コンテキスト: 重要度 = Warning ホスト名 = ConsoleHost ホストのバージョン = 4.0 ホスト ID = 1e327d4d-8013-4a09-ae3f-eb3d61ff6321 エンジンのバージョン = 4.0 実行空間 ID = 9a0b18e0-eea0-40da-a5e8-6607ede8eaa5 パイプライン ID = 1 コマンド名 = Get-WebConfiguration コマンドの種類 = Cmdlet スクリプト名 = 【※スクリプトのフルパス名が出ています】 コマンド パス = シーケンス番号 = 17 ユーザー = 【※サーバ名】\Administrator シェル ID = Microsoft.PowerShell ユーザー データ: --------------------------------------------

###該当のソースコード

Get- WebConfiguration /system.webServer/security/ipSecurity/* -location ”IIS:¥Sites” | Out-String -Stream この部分のコマンドでJP1経由だとエラーが発生します。

###試したこと

・コマンドのパス比較 Get-WebConfigurationコマンドまでのパスの見え方が違うのかと思って、gcmコマンドにてコマンドパスを確認しましたが、直接実行とJP1実行でパスの見え方は変わりませんでした。 --------------------------------------------- Name : Get-WebConfiguration CommandType : Cmdlet Definition : Get-WebConfiguration [-Filter] <string[]> [[-PSPath] <string[]>] [-Recurse] [-Metadata] [-Clr <strin g>] [-Location <string[]>] [<CommonParameters>] Path : AssemblyInfo : DLL : C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.IIS.PowerShell.Provider\v4.0_8.5.0.0__31bf3856a d364e35\Microsoft.IIS.PowerShell.Provider.dll HelpFile : Microsoft.IIS.PowerShell.Provider.dll-Help.xml ParameterSets : {[-Filter] <string[]> [[-PSPath] <string[]>] [-Recurse] [-Metadata] [-Clr <string>] [-Location <stri ng[]>] [<CommonParameters>]} ImplementingType : Microsoft.IIs.PowerShell.Provider.GetConfigurationCommand Verb : Get Noun : WebConfiguration ---------------------------------------------
・環境変数を設定してみました 実行時の環境変数が異なっていましたので、手動実行時に設定される環境変数を JP1から実行した際の環境変数にすべて設定をしてみましたが、結果は変わらずでした。 ※環境変数の設定はスクリプト内にべた書きで定義して確認
・Get-WebConfigurationをインポートする処理をスクリプトに入れてみました 単純に「Get-WebConfiguration」というコマンドの解釈が出来ない気がしたので以下のインポート文をスクリプトにいれてみましたがダメでした。 ipmo WebAdministration
手動実行の場合、「cd iis:\」ができるがJP1経由の場合、対象のディスクが無い旨のエラーメッセージが出力 IIS関連の情報が見えていないと思われます。

###補足情報(言語/FW/ツール等のバージョンなど)
JP1/Base ( 11-00-01 )
Windows Server 2012
PowerShell V4.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

over

2016/07/14 00:04

PCジョブで実行とありますが、実行しているのはPowershellスクリプトですか ?それともPCジョブで直接コマンドを指定していますか? Powershellスクリプトで実行している場合、タスクから実行すると違いはあるでしょうか? おそらく、関連するDLLがJP1実行時において参照できていないのではと思っています。
hetare_SE

2016/07/14 00:15

over様 情報ありがとうございます。 >PCジョブで実行とありますが、実行しているのはPowershellスクリプトですか ? PCジョブから対象サーバに配置されたPowershellスクリプトを実行しています。 >タスクから実行すると違いはあるでしょうか? タスクから実行してみましたが「手動実行」と同じように問題が発生せず正常に動作します。 >おそらく、関連するDLLがJP1実行時において参照できていないのではと思っています。 当方も関連DLL等が参照できていないとみています。 JP1から実行時の環境変数は「手動実行」の時に設定されている環境変数と同じようにしてみましたが、変化無しでした。 JP1経由だとIISのディレクトリが見えていない(cd できなかった)事が分かりました。
guest

回答1

0

ベストアンサー

外していたらすいません。
Windows Server 2012 とのことで64bit環境かと思いますが、対象のDLLが隠しフォルダ「SysWOW64」に格納されているのであれば、JP1からは参照できないかも知れません。
バッチの場合は、フルパスでsysWow64以下のバイナリを指定してあげることで解決できた記憶があります。

投稿2016/07/14 01:27

over

総合スコア4309

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

over

2016/07/14 01:37

補足で。 類似アプリケーションで遭遇した事象なので、今回の事象にマッチしないかもです。
hetare_SE

2016/07/14 04:24

DLLというより、「/system.webServer/security/ipSecurity/*」この部分が 見えていないという状態です。この部分が指し示す場所が分かれば良いのですが。
over

2016/07/14 04:33

powershellを実行する際、明示的にSysWOW64以下にあるpowershell.exeから実行しては如何でしょうか。
hetare_SE

2016/07/14 05:05

返信ありがとうございます。 実行ファイル名に「C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe」を指定して実行しましたが、同じエラーが発生しました。
over

2016/07/14 05:07

すいません。以下でどうでしょうか。 C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe
hetare_SE

2016/07/14 05:33

over様 解決しました! 教えていただいた指定方法で実行したところ、見事に実行出来ました! 本当にありがとうございます。
over

2016/07/14 05:49

今更でアレですけど... JP1等有償の自動ジョブ実行環境を導入しているとなると、ある程度規模のあるサイトとお見受けします。 ベンダサポートから改めて正式な回答は頂くべきと考えます。 本件によって、万が一取り返しのつかない障害が発生した場合の説明責任を問われることになります。
hetare_SE

2016/07/14 05:50

承知しました。確認いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問