Public/Test-TechCarePrerequisite.ps1
|
function Test-TechCarePrerequisite { <# .SYNOPSIS Comprueba plataforma, privilegios y estado de administracion del equipo. .DESCRIPTION Es el unico cmdlet que puede ejecutarse en cualquier sistema operativo sin error: su trabajo es precisamente decir si el resto puede ejecutarse. Fuera de Windows devuelve IsWindows en falso y una razon legible. .EXAMPLE Test-TechCarePrerequisite Muestra si la sesion es elevada y si el equipo esta gestionado. .EXAMPLE if (-not (Test-TechCarePrerequisite).IsAdmin) { 'Relanza como administrador' } Comprobacion previa antes de automatizar una pasada con -Apply. .OUTPUTS PSCustomObject .LINK https://github.com/earbona23/TechCare #> [CmdletBinding()] [OutputType([pscustomobject])] param() $isWindowsHost = Test-TechCarePlatform $isAdmin = Test-TechCareAdmin $managed = [string[]]@() $osCaption = '' $osBuild = 0 $supported = $false if ($isWindowsHost) { $managed = @(Get-TechCareManagedState) try { $os = Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction Stop $osCaption = [string]$os.Caption $osBuild = [int]$os.BuildNumber # 10240 es la primera compilacion de Windows 10; por debajo de ella el # modulo se ejecuta pero DISM y winget no se comportan igual. $supported = ($osBuild -ge 10240) } catch { $osCaption = 'No se pudo leer la version del sistema: ' + $_.Exception.Message } } $relaunch = '' if ($isWindowsHost -and -not $isAdmin) { $shell = 'pwsh' if ($PSVersionTable.PSEdition -eq 'Desktop') { $shell = 'powershell' } $relaunch = 'Start-Process {0} -Verb RunAs -ArgumentList ''-NoExit -Command "Import-Module TechCare; Invoke-TechCare"''' -f $shell } return [pscustomobject]@{ IsWindows = $isWindowsHost IsAdmin = $isAdmin IsSupportedWindows = $supported OSCaption = $osCaption OSBuild = $osBuild IsManaged = ($managed.Count -gt 0) ManagedReasons = $managed RelaunchCommand = $relaunch PSVersion = $PSVersionTable.PSVersion.ToString() PSEdition = $PSVersionTable.PSEdition ModuleVersion = $script:ModuleVersion } } |