サーバに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