Windowsシステム情報取得スクリプト(Powershell)



WindowsOSのシステム情報採取のPowershellスクリプトを作ってみました。

サンプルでは下記コマンドの実行結果を取っていますが、任意で追加削除し使って頂ければと思います。

  • ホスト名
  • OSバージョン
  • システム環境変数
  • エイリアスリスト
  • プロセスリスト
  • サービスリスト
  • イベントログ(System)
  • イベントログ(Application)
  • インストールアプリケーションリスト
  • BIOSバージョン
  • プロセッサ情報
  • PnPデバイス情報
  • デバイスリスト
  • HotFixリスト
  • <#
    #-----------------------------------------------------------
    #    名前:
    #          WindowsOS システム情報採取スクリプト
    #    機能:
    #          各種システム情報をテキストファイルに出力する
    #    スクリプト動作確認環境:
    #          Microsoft Windows XP Professional 5.1.2600 Service Pack 3
    #          Microsoft Powershell 2.0
    #    戻り値:
    #          0   -> 正常終了
    #          1=< -> 異常終了
    #    作成:
    #          mani.tar(https://manitaninforest.wordpress.com)
    #-----------------------------------------------------------
    #>
    
    #
    #   INIT
    #
    
    #   スクリプト名取得
    $ScriptName = $MyInvocation.MyCommand.Name.replace(".ps1","")
    #   スクリプト格納パス取得
    $ScriptPath = Split-Path $MyInvocation.MyCommand.Path
    #   ホスト名取得
    $hostname = Invoke-Expression hostname
    #   ログファイルパス定義
    $log = Get-Date -UFormat ($ScriptPath + "\" + $ScriptName + "_" + $hostname + "_%Y%m%d_%H%M%S.log")
    
    #   [関数]標準出力フォーマット
    function Write-Cons($str){
        Write-Host -NoNewline (Get-Date), "[", $ScriptName, "]", $str
    }
    
    #
    #   採取資料リスト
    #
    $line = "hostname",                                                     # ホスト名`
            "[Environment]::OSVersion | Format-List",                       # OSバージョン`
            "Get-ChildItem env: | Format-Table -Autosize",                  # システム環境変数`
            "Get-Command -CommandType Alias | Format-Table -Autosize",      # エイリアスリスト`
            "Get-Process | Format-Table -Autosize",                         # プロセスリスト`
            "Get-Service | Format-Table -Autosize",                         # サービスリスト`
            "Get-EventLog system -newest 30 | Format-List",                 # イベントログ(SYS)`
            "Get-EventLog application -newest 30 | Format-List",            # イベントログ(APL)`
            "Get-WmiObject -Class Win32_Product| Format-Table -Autosize",   # インストールアプリケーションリスト`
            "Get-WmiObject -Class Win32_Bios",                              # BIOSバージョン`
            "Get-WmiObject -Class Win32_Processor",                         # プロセッサ情報`
            "Get-WmiObject -Class Win32_PnpEntity",                         # PnPデバイス情報`
            "Get-WmiObject -Class Win32_LogicalDisk | format-table -autosize",        # デバイスリスト`
            "Get-WmiObject -Class Win32_QuickFixEngineering | Format-Table -Autosize" # HotFixリスト`
    
    #   採取資料リスト ヘッダ書き込み
    Write-output "#====================== < List > ======================#"        > $log
    for ($i = 0; $i -lt $line.Length; $i++){
        Write-Output ("[" + $i + "] " + $line[$i])                                 >> $log
    }
    Write-output "#======================================================#`r`n"    >> $log
    
    #
    #   主処理
    #
    Write-Cons "Start.`n"
    for ($i = 0; $i -lt $line.Length; $i++){
        Write-Cons "[", $i, "]", $line[$i], " ..."
        Write-Output ("■" + "[" + $i + "] " + $line[$i] + "(" + (Get-Date) + ")") >> $log
        Write-Output "------------------------------------------------"            >> $log
        Invoke-Expression $line[$i] | Out-File -FilePath $log -Append -Width 2147483647
        Write-Output "------------------------------------------------`r`n"        >> $log
        Write-Host "done."
    }
    
    get-item $log | select-object FullName
    
    Write-Cons "End.`n"
    exit 0
    

    Powershellは弄り始めたばかりなので全く洗練されていないコードなのですが、もし不具合や「こうした方がいいよ」等ありましたらコメント頂けると有り難いです。
    自分的には1コマンド1ファイルで出力させてZipアーカイブさせたいのですが、そこは追々書き換えていきたいと思っています。

    実行例について下記を参照ください。

    任意のフォルダにPowershellスクリプトを用意します。

    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        2012/11/27     17:58       3297 CollecterForWin.ps1
    

    引数無しで実行してください。

    PS C:\Documents and Settings\tmp> .\CollecterForWin
    2012/11/27 18:01:25 [ CollecterForWin ] Start.
    2012/11/27 18:01:25 [ CollecterForWin ] [ 0 ] hostname  ...done.
    2012/11/27 18:01:25 [ CollecterForWin ] [ 1 ] [Environment]::OSVersion | Format-List  ...done.
    2012/11/27 18:01:25 [ CollecterForWin ] [ 2 ] Get-ChildItem env: | Format-Table -Autosize  ...done.
    2012/11/27 18:01:25 [ CollecterForWin ] [ 3 ] Get-Command -CommandType Alias | Format-Table -Autosize  ...done.
    2012/11/27 18:01:25 [ CollecterForWin ] [ 4 ] Get-Process | Format-Table -Autosize  ...done.
    2012/11/27 18:01:26 [ CollecterForWin ] [ 5 ] Get-Service | Format-Table -Autosize  ...done.
    2012/11/27 18:01:26 [ CollecterForWin ] [ 6 ] Get-EventLog system -newest 30 | Format-List  ...done.
    2012/11/27 18:01:26 [ CollecterForWin ] [ 7 ] Get-EventLog application -newest 30 | Format-List  ...done.
    2012/11/27 18:01:26 [ CollecterForWin ] [ 8 ] Get-WmiObject -Class Win32_Product| Format-Table -Autosize  ...done.
    2012/11/27 18:01:51 [ CollecterForWin ] [ 9 ] Get-WmiObject -Class Win32_Bios  ...done.
    2012/11/27 18:01:51 [ CollecterForWin ] [ 10 ] Get-WmiObject -Class Win32_Processor  ...done.
    2012/11/27 18:01:52 [ CollecterForWin ] [ 11 ] Get-WmiObject -Class Win32_PnpEntity  ...done.
    2012/11/27 18:01:55 [ CollecterForWin ] [ 12 ] Get-WmiObject -Class Win32_LogicalDisk | format-table -autosize  ...done.
    2012/11/27 18:01:55 [ CollecterForWin ] [ 13 ] Get-WmiObject -Class Win32_QuickFixEngineering | Format-Table -Autosize  ...done.
    
    FullName
    --------
    C:\Documents and Settings\tmp\CollecterForWin_Hoge_20121127_180125.log
    2012/11/27 18:01:59 [ CollecterForWin ] End.
    
    PS C:\Documents and Settings\tmp>
    

    ログファイルが1つだけカレントフォルダに出力されます。

    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        2012/11/27     18:03       3359 CollecterForWin.ps1
    -a---        2012/11/27     18:01     710888 CollecterForWin_Hoge_20121127_180125.log
    

    ログファイルの内容は以下の様なものです。

    PS C:\Documents and Settings\tmp> more *log
    #====================== < List > ======================#
    [0] hostname
    [1] [Environment]::OSVersion | Format-List
    [2] Get-ChildItem env: | Format-Table -Autosize
    [3] Get-Command -CommandType Alias | Format-Table -Autosize
    [4] Get-Process | Format-Table -Autosize
    [5] Get-Service | Format-Table -Autosize
    [6] Get-EventLog system -newest 30 | Format-List
    [7] Get-EventLog application -newest 30 | Format-List
    [8] Get-WmiObject -Class Win32_Product| Format-Table -Autosize
    [9] Get-WmiObject -Class Win32_Bios
    [10] Get-WmiObject -Class Win32_Processor
    [11] Get-WmiObject -Class Win32_PnpEntity
    [12] Get-WmiObject -Class Win32_LogicalDisk | format-table -autosize
    [13] Get-WmiObject -Class Win32_QuickFixEngineering | Format-Table -Autosize
    #======================================================#
    
    ■[0] hostname(11/27/2012 18:01:25)
    ------------------------------------------------
    Hoge
    ------------------------------------------------
    
    ■[1] [Environment]::OSVersion | Format-List(11/27/2012 18:01:25)
    ------------------------------------------------
    
    
    Platform      : Win32NT
    ServicePack   : Service Pack 3
    Version       : 5.1.2600.196608
    VersionString : Microsoft Windows NT 5.1.2600 Service Pack 3
    
    
    
    ------------------------------------------------
    
    ■[2] Get-ChildItem env: | Format-Table -Autosize(11/27/2012 18:01:25)
    ------------------------------------------------
    
    Name                   Value
    
    ----                   -----
    
    ALLUSERSPROFILE        C:\Documents and Settings\All Users
    
    APPDATA                C:\Documents and Settings\Hoge\Application Data
    
    CLIENTNAME             Console
    
    CommonProgramFiles     C:\Program Files\Common Files
    :(後略)
    PS C:\Documents and Settings\tmp>
    

    「Windows PowerShell でのスクリプティング」
    http://technet.microsoft.com/ja-jp/scriptcenter/powershell.aspx

    それからPowerShell 3.0がリリースされましたね。
    「Windows PowerShell: 新しいシェルの紹介」
    http://technet.microsoft.com/ja-jp/magazine/hh641408.aspx


    amazonへジャンプ: powershell

    広告
    カテゴリー: IT, Windows タグ: , , , パーマリンク

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中