end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

(再) サーバにinstallされているOSやMWの一覧を自動収集したい (windows版)

サーバにinstallされているOSやMWの一覧を自動収集したい (windows版) - end0tknr's kipple - 新web写経開発

先日、記載したエントリではワンライナーで、読みづらいので power shell script らしく?修正しました。(以下)

function do_main {

    $i = 0

    #### win os 情報の収集
    $os_info = collect_win_os_ver
    $disp_cols = @([string] $i++,
           $os_info.SystemDirectory,
           $os_info.Version,
           $os_info.RegisteredUser )

    # タブ区切りで出力
    $disp_str = [string]::Join("`t", $disp_cols)
    # Write-Host と Write-Output の違いは要注意
    Write-Output $disp_str

    
    #### strawberry perl のver
    $disp_str = collect_perl_ver
    $disp_cols = @([string] $i++,
           "perl"
           $disp_str)
    $disp_str = [string]::Join("`t", $disp_cols)
    Write-Output $disp_str

    #### java spring のver
    $disp_str = collect_java_spring_ver
    $disp_cols = @([string] $i++,
           "java spring"
           $disp_str)
    $disp_str = [string]::Join("`t", $disp_cols)
    Write-Output $disp_str

    #### installerでinstallされたアプリ情報の収集
    $pkg_infos = collect_normal_package
    ## [string] $i は、数値の文字列化
    $i = 0
    foreach ($pkg_info in $pkg_infos) {

    if($pkg_info.DisplayName.Length -eq 0 -and
       $pkg_info.DisplayVersion.Length -eq 0 -and
       $pkg_info.Publisher.Length -eq 0 ){
           continue
       }

    $disp_cols = @([string] $i++,
               $pkg_info.DisplayName,
               $pkg_info.DisplayVersion,
               $pkg_info.Publisher)
    $disp_str = [string]::Join("`t", $disp_cols)
    Write-Output $disp_str
    }


}


function collect_java_spring_ver {

    $gradle_file =
    "c:\home\end0tknr\eclipse-workspace-oxygen\SpringBootMyBatis\build.gradle"
    $item_prop =
    Get-Content -Encoding UTF8 $gradle_file | Select-String "springBootVersion ="

    return $item_prop.toString().trim()
}


function collect_perl_ver {
    $item_prop = perl -v | Select-String -Pattern "version"
    return $item_prop.toString().trim()
}

function collect_win_os_ver {
    $item_prop =
    @(Get-WmiObject Win32_OperatingSystem |
      Select-Object SystemDirectory, Version, RegisteredUser )

    return $item_prop
}


function collect_normal_package {
    $pkg_infos =
    @( Get-ChildItem -Path(
           'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
           'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'))
    
    $ret_pkg_infos = @()
    foreach ($pkg_info in $pkg_infos) {
    $item_prop =
    @(Get-ItemProperty $pkg_info.PsPath |
      Select-Object DisplayName, DisplayVersion, Publisher )

    $ret_pkg_infos += $item_prop
    }
    return $ret_pkg_infos
}

# function collect_normal_package {
#     $pkg_infos =
#     @( Get-ChildItem -Path(
#      'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
#      'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall') |
#        % { Get-ItemProperty $_.PsPath |
#        Select-Object DisplayName, DisplayVersion, Publisher } )
#     return $pkg_infos
# }


do_main