none
サーバ上に導入されているソフトウェアの一覧を取得する。 RRS feed

  • 質問

  • はじめまして、PowerShell初心者のものです。

     

    サーバ上に導入されているソフトウェアの一覧を取得し、CSVへ一覧として出力したいのですが、

    何か良い方法はありますでしょうか?

     

    WindowsXPでは、 get-wmiobject win32_productという WMIの情報を取得できるようなのですが、

    実行する場所がサーバであるため、「win32_prodcut」が提供されていないようです。

     

     

    CSV出力イメージ

    ホスト名,OS,導入ソフトウェア1,導入ソフトウェア2,,,,,,,,,,,,

    2008年3月4日 9:55

回答

すべての返信

  • サーバーのOSは何でしょうか?
    WIndows系OSであれば、Get-WmiObjectコマンドレットは -compterName というパラメータがあるので、これを使用したら取得できませんか?

    とりあえず
    Get-WmiObject -computerName コンピュータ名 win32_product
    でどうでしょうか

    自分も試したことがなく、確証はありませんが...



    HIRO's.NET http://hiro.wankuma.com/
    HIRO's.NET Blog http://blogs.wankuma.com/hiro/
    2008年3月4日 13:04
  • HIROs-NETです。

     

    先ほど WnXP + PowerShell から Win2KのPCに対して行ってみたところ、上記でうまくいきました。

    ということで、試してみてください。

     

     

     

     


    HIRO's.NET http://hiro.wankuma.com/
    HIRO's.NET Blog http://blogs.wankuma.com/hiro/[/
    2008年3月4日 23:19
  • 返信ありがとうございます。

     

    PS初心者です。

     

    Powershellの実行対象OS:Windows Server 2003で

    データ取得対象OS      :Windows Server 2003, 2003R2です。

     

    実行対象OSが、Windows 2003のため、XPにはあるのですが、wmiobjectのwin32_productが存在しないようなのです。

     

     

    ※windowsXP端末からの場合、サーバにアクセスするアカウントでのログオンはできないため、サーバ上から、wmiobjectで値を取得するさいに、アクセス拒否されてしまいます。

    取得するサーバに一度、サーバにアクセス権限のあるユーザアカウントでnet useなどで認証しいても結果は同様でした。

     

    ---Error内容---

    Get-WmiObject : アクセスが拒否されました。 (HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))
    発生場所 行:1 文字:14
    + Get-WmiObject  <<<< -ComputerName server1 win32_product

    -------------------

     

    もう少し、Windows Server 2003でないか模索してみます。

    お忙しいところ、ありがとうございました。

    2008年3月5日 6:21
  • PS初心者さん、こんにちは。

    Windows Server 2003 では win32_product を含む MSI Provider は、
    デフォルトではインストールされないようです。

    [コントロールパネル] - [プログラムの追加と削除] - [Windows コンポーネントの追加と削除]
     - [管理とモニタツール] - (詳細) - [WMI Windows インストーラ プロバイダ]

    をチェックしてインストールすると、win32_product も値が返ってくるようになりました。

    ただ、上記のエラーは、アクセス権がないと言っていますね。
    Administrators グループのユーザでアクセスされていますでしょうか?
    それとも管理者権限のないユーザーでしょうか。
    2008年3月7日 5:57
  • こんにちは。フォーラムオペレータの栗原麻里 です。

     

    HIROs-NET さん、回答ありがとうございます。

     

    PS初心者 さん、フォーラムのご利用ありがとうございます。
    その後いかがでしょうか?
    有用な情報だと思いましたので、HIROs-NET さんの回答へ回答済みチェックをつけさせていただきました。
    追加の質問等ありましたら、ぜひ投稿してください!

     

    回答済みチェックが付くことにより、フォーラムをご利用していただいている皆様が、有用な情報を
    見つけやすくなります。
    ですので、回答された情報が有用だと思われましたら、ぜひ回答済みボタンを押してチェックを付けて
    くださいね!

     

    PS初心者 さんはチェックを解除することもできますので、ご確認ください。

     

    それでは、ぜひまたご活用ください!

    2008年4月11日 7:19
  • 大量のサーバから一気に情報収集したいといった用途でしょうか?

    かなり遅いレスですが、私も同様の用途で苦労し、何とかめどがついたので御参考まで。

     

    リモートレジストリ経由で取得するやり方です。

    XP端末から実行し、リモートの Win200 と Win2003 への接続で動作確認しました。

     

    まだ、完全に詰めてはいませんが、下記ソースで上手くいきました。

     

    ---------------------------------------------------------------------------------


    $対象ホスト="Host"
    $対象パスワード="Password"
    $SWレジストリ="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"


    net use \\$対象ホスト\IPC$ /user:$対象ホスト\administrator $対象パスワード

     

    $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $対象ホスト)

     

    $Reg.OpenSubKey($SWレジストリ).GetSubKeyNames() | ForEach-Object{
     $Reg.OpenSubKey($SWレジストリ + "\\" + $_).GetValue("DisplayName")
    } | Sort-Object

    ---------------------------------------------------------------------------------

    (全角「:」は、半角「:」に置きかえて下さい)

     

    対象サーバ上で「WMI Windows インストーラ プロバイダ」 を有効にする必要はありませんが、

    当然ながら「Remote Registry」のサービスが起動している必要があります。

     

    私の場合は 「Remote Registry」が上がっていない場合は、WMI経由で起動する

    ようにしようかと考えています。

     

    ちなみに、WMI接続でポップアップのパスワード入力が求められる場合の回避法です。

    ---------------------------------------------------------------------------------

    $接続ユーザー = "User"
    $接続パスワード = "Password"

    $暗号化パスワード = ConvertTo-SecureString -string $接続パスワード -asPlainText -force
    $資格情報 = New-Object System.Management.Automation.PsCredential $接続ユーザー,$暗号化パスワード
    ---------------------------------------------------------------------------------

    上記後、WMI接続時に 「-Credential $資格情報」 としてやれば大丈夫だと思います。

    2008年12月1日 7:32