Libraries/Lib.Linux/Lib.Linux.psm1
<#
#> $Script:NS = (get-item $PSCommandPath).basename function Get-OSKernelVersion { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $matches = (Get-ChildItem $Root/boot/).name | Select-String -Pattern "-(?<version>\d{1,}\.\d{1,}\.\d{1,}-\d{1,})-" $versions = ($matches.Matches.Groups | Where-Object { $_.Name -eq "version" }).Value | Sort-Object -Unique $matches2 = $versions | Select-String -Pattern "(?<major>\d{1,})\.(?<minor>\d{1,})\.(?<build>\d{1,})-(?<rev>\d{1,})" $versions2 = @() $matches2 | ForEach-Object { $versions2 += [System.Version]"$(($_.Matches.Groups | where-Object { $_.name -eq "major" }).Value).$(($_.Matches.Groups | where-Object { $_.name -eq "minor" }).Value).$(($_.Matches.Groups | where-Object { $_.name -eq "build" }).Value).$(($_.Matches.Groups | where-Object { $_.name -eq "rev" }).Value)" } return ($versions2 | Sort-Object | Select-Object -Last 1) } End { Write-PwShFwOSLeaveFunction } } function Get-OSFamily { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $family = "" if (fileExist "$Root/etc/debian_version") { $family = "debian" } if (fileExist "$Root/etc/os-release") { $OSRELEASE = Get-Content "$Root/etc/os-release" -Raw | ConvertFrom-StringData if ($OSRELEASE.ID_LIKE) { $family = $OSRELEASE.ID_LIKE.Tolower() } elseif ($OSRELEASE.ID) { $family = $OSRELEASE.ID.Tolower() } } return (get-culture).TextInfo.ToTitleCase($family) } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Get the distribution of the OS #> function Get-OSDistrib { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $fileExist = Test-Path -Path "$Root/etc/os-release" -PathType Leaf if ($fileExist) { # $distrib = (Get-Content "$Root/etc/os-release" | where { $_ -match "^NAME=" }).split("=")[1].replace('"','') $id = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "ID" $c = (Get-Culture).TextInfo $distrib = $c.ToTitleCase($id) } return $distrib } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Get the distribution of the OS #> <# .SYNOPSIS Get the OS codename .DESCRIPTION The codename is often used to quicky identify an OS in a unique and friendly way. .PARAMETER Online Specify to look at the currently running OS .PARAMETER Root The root path under wich to look for the OS .EXAMPLE Get-OSCodename -Online .NOTES General notes #> function Get-OSCodename { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $value = $null $fileExist = Test-Path -Path "$Root/etc/os-release" -PathType Leaf if ($fileExist) { # $distrib = (Get-Content "$Root/etc/os-release" | where { $_ -match "^NAME=" }).split("=")[1].replace('"','') $value = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "VERSION_CODENAME" # /etc/os-release sometimes lacks the VERSION_CODENAME property... try to find something else if ([string]::IsNullOrEmpty($value)) { $value = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "VERSION" # find something between parenthesis $value = $value -replace ".*\((.*)\)", '$1' } } return $value } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Get the distribution of the OS #> function Get-OSProductname { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $value = "" $fileExist = Test-Path -Path "$Root/etc/os-release" -PathType Leaf if ($fileExist) { # $distrib = (Get-Content "$Root/etc/os-release" | where { $_ -match "^NAME=" }).split("=")[1].replace('"','') $value = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "PRETTY_NAME" } return $value } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Get the distribution of the OS #> function Get-OSVersion { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $value = "" $fileExist = Test-Path -Path "$Root/etc/os-release" -PathType Leaf if ($fileExist) { # $distrib = (Get-Content "$Root/etc/os-release" | where { $_ -match "^NAME=" }).split("=")[1].replace('"','') $value = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "VERSION" # remove everything that is not a digit, not a dot $value = $value -replace "[^0-9.]", "" } return [system.version]$value } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Get the distribution of the OS #> function Get-OSDisplayVersion { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $value = "" $fileExist = Test-Path -Path "$Root/etc/os-release" -PathType Leaf if ($fileExist) { # $distrib = (Get-Content "$Root/etc/os-release" | where { $_ -match "^NAME=" }).split("=")[1].replace('"','') $value = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "VERSION" } return $value } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS .DESCRIPTION Long description .PARAMETER Online Parameter description .PARAMETER Path Parameter description .EXAMPLE An example .NOTES General notes #> function Get-OSReleaseId { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $value = "" $fileExist = Test-Path -Path "$Root/etc/os-release" -PathType Leaf if ($fileExist) { # $distrib = (Get-Content "$Root/etc/os-release" | where { $_ -match "^NAME=" }).split("=")[1].replace('"','') $value = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "VERSION_ID" } return $value } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Get the Product name of the OS #> function Get-OSEdition { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $value = "" if ($Online) { $value = $env:XDG_CURRENT_DESKTOP } return $value } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Get the Product name of the OS #> function Get-OSLongCodeName { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $value = "" $fileExist = Test-Path -Path "$Root/etc/os-release" -PathType Leaf if ($fileExist) { # $distrib = (Get-Content "$Root/etc/os-release" | where { $_ -match "^NAME=" }).split("=")[1].replace('"','') $value = Get-PropertyValueFromFile -Filename "$Root/etc/os-release" -Propertyname "VERSION" $value = $value.Split("(")[-1].Replace(")", "") } return $value } End { Write-PwShFwOSLeaveFunction } } function Get-OSFiles { [CmdletBinding()][OutputType([Hashtable])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $Root = $Root.TrimEnd('/\') $wkFiles = @{} # if (FileExist ("$Root/sbin\ntoskrnl.exe")) { # $wkFiles.Add('kernel', "$Root/sbin\ntoskrnl.exe") # } return ($wkFiles | Sort-HashTable) } End { Write-PwShFwOSLeaveFunction } } function Get-OSFolders { [CmdletBinding()][OutputType([Hashtable])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } $Root = $Root.TrimEnd('/\') $wkFolders = @{} if (DirExist ("$Root/etc")) { $wkFolders.Add('etc', "$Root/etc") # $wkFolders.Add('ProgramData', "$Root/etc") } if (DirExist ("$Root/bin")) { $wkFolders.Add('bin', "$Root/bin") $wkFolders.Add('bin-x86', "$Root/bin") $wkFolders.Add('bin-x64', "$Root/bin") $wkFolders.Add('ProgramFiles', "$Root/bin") $wkFolders.Add('ProgramFiles-x86', "$Root/bin") $wkFolders.Add('ProgramFiles-x64', "$Root/bin") } if (DirExist ("$Root/sbin")) { $wkFolders.Add('sbin', "$Root/sbin") $wkFolders.Add('sbin-x64', "$Root/sbin") $wkFolders.Add('System-x86', "$Root/sbin") $wkFolders.Add('System-x64', "$Root/sbin") } if (DirExist ("$Root/var/lib")) { $wkFolders.Add('var', "$Root/var/lib") $wkFolders.Add('ProgramData', "$Root/var/lib") } if (DirExist ("$Root/var/log")) { $wkFolders.Add('log', "$Root/var/log") } return ($wkFolders | Sort-HashTable) } End { Write-PwShFwOSLeaveFunction } } function Get-OSSystemRoot { [CmdletBinding()][OutputType([String])]Param ( [switch]$Online, [string]$Root = "/" ) Begin { Write-PwShFwOSEnterFunction } Process { if ($Online) { $Root = '/' } return $Root } End { Write-PwShFwOSLeaveFunction } } <# .SYNOPSIS Return a the commonly used name for an OS. .DESCRIPTION Return a the commonly used name for an OS. .PARAMETER Online True to specify to fetch information from the running OS .PARAMETER Root The path to the root of an OS. .EXAMPLE Get-OSName -Online .EXAMPLE Get-OSName -Root '/mnt/sda3' .EXAMPLE Get-OSName -Root 'F:\' .NOTES General notes #> function Get-OSName { [CmdletBinding()][OutputType([String])]Param ( [Parameter(ParameterSetName = 'ONLINE')][switch]$Online, [Parameter(ParameterSetName = 'ROOT')][string]$Root ) Begin { Write-PwShFwOSEnterFunction } Process { switch ($PSCmdlet.ParameterSetName) { 'ONLINE' { $distrib = Get-OSDistrib -Online $releaseId = Get-OSReleaseId -Online break } 'ROOT' { $distrib = Get-OSDistrib -Root $Root $releaseId = Get-OSReleaseId -Root $Root break } } # return $Distrib + "." + $ReleaseId.replace('.','') return "$Distrib $ReleaseId" } End { Write-PwShFwOSLeaveFunction } } |