PoshCode Archive  Artifact [83630e0692]

Artifact 83630e069298b31d00365a17be7b74aa8240ff9628435f51731a6e590317e933:

  • File Final-AwesomeTools-mod.ps1 — part of check-in [2a7b37b705] at 2018-06-10 13:52:00 on branch trunk — FInal module from class (user: Don Jones size: 4907)

# encoding: ascii
# api: powershell
# title: Final "AwesomeTools" mod
# description: FInal module from class
# version: 0.1
# type: function
# author: Don Jones
# license: CC0
# function: Get-SystemInfo
# x-poshcode-id: 5227
# x-archived: 2014-07-01T21:18:13
# x-published: 2014-06-06T12:54:00
#
#
$ErrorLogFilePreference = "c:\err.txt"


function Get-SystemInfo {
<#
.SYNOPSIS
Gets system info.
.DESCRIPTION
This gets system info.
.PARAMETER ComputerName
A computer name.
.EXAMPLE
Get-SystemInfo -ComputerName WHATEVER
This example gets system info from the computer 'WHATEVER'
#> 
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$True,ValueFromPipeline=$True)]
        [ValidateLength(2,5)]
        [string[]]$ComputerName,

        [string]$ErrorLogFile = $ErrorLogFilePreference
    )
    BEGIN {}
    PROCESS {
        foreach ($computer in $computername) {
            try {
                $os = Get-CimInstance -ErrorAction Stop -ClassName Win32_OperatingSystem -ComputerName $Computer
                $comp = Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $Computer
                $bios = Get-CimInstance -ClassName Win32_BIOS -ComputerName $Computer
                $proc = Get-CimInstance -ClassName Win32_Processor -ComputerName $Computer |
                    Select-Object -First 1
                Write-Debug "Done querying CIM"

                $properties = @{'ComputerName'=$Computer;
                            'OSVersion'=$os.Version;
                            'SPVersion'=$os.ServicePackMajorVersion;
                            'OSArchitecture'=$os.OSArchitecture;
                            'ProcArchitecture'=$proc.addresswidth;
                            'Manufacturer'=$comp.Manufacturer;
                            'Model'=$comp.model;
                            'BIOSSerial'=$bios.SerialNumber;
                            'RAM'=$comp.TotalPhysicalMemory}
                $object = New-Object -TypeName PSObject -Property $properties
                $object.psobject.typenames.insert(0,'Awesome.SystemInfo')
                Write-Output $object
            } catch {
                Write-Warning "OMG, $computer FAIL!!!!"
                Write-Verbose "Logged error to $ErrorLogFile"
                $computer | out-file $ErrorLogFile -append
            }
        } #foreach
    } #PROCESS
    END {}
} #function


function Get-DiskInfo {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True,ValueFromPipeline=$True)]
        [string[]]$ComputerName
    )
    BEGIN {}
    PROCESS {
        foreach ($comp in $computername) {
            try {
                Write-Verbose "Now attempting $comp"
                $params = @{'ComputerName'=$Comp;
                            'ClassName'='Win32_LogicalDisk';
                            'Filter'="DriveType=3";
                            'ErrorAction'='Stop'}
                $disks = Get-CimInstance @params #that's called splatting

                foreach ($disk in $disks) {

                    Write-Verbose "Working on $($disk.deviceid)"
                    $properties = @{'ComputerName'=$comp;
                                    'Drive'=$disk.DeviceID;
                                    'FreeSpace'=$disk.FreeSpace;
                                    'Size'=$disk.Size;
                                    'FreePercent'=($disk.FreeSpace / $disk.Size * 100 -as [int])}
                    $object = New-Object -TypeName PSObject -Property $properties
                    Write-Output $object
                } #foreach disk
            } catch {
                Write-Warning "$comp FAILED"
                $comp | out-file $ErrorLogFilePreference -append
            }
        } #foreach computer
    } #process
    END {}
} #function



function Set-ComputerState {
    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
    Param(
        [Parameter(Mandatory=$True,ValueFromPipeline=$True)]
        [string[]]$ComputerName,

        [Parameter(Mandatory=$True)]
        [ValidateSet('PowerOff','LogOff','Restart','Shutdown')]
        [string]$State,

        [switch]$force
    )
    PROCESS {
        switch ($state) {
            'PowerOff' { $arg = 8 }
            'LogOff' { $arg = 0 }
            'Shutdown' { $arg = 1 }
            'Restart' { $arg = 2 }
        }
        if ($force) { $arg += 4 }

        foreach ($comp in $ComputerName) {
            if ($PSCmdlet.ShouldProcess("$state on $comp")) {
                $os = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $comp
                $os.Win32Shutdown($arg)
            } #if
        } #foreach
    }
} #function


Export-ModuleMember -Variable ErrorLogFilePreference -Function Get-SystemInfo,Get-DiskInfo,Set-ComputerState