-
Notifications
You must be signed in to change notification settings - Fork 0
/
V18 Get-BootTimes.ps1
65 lines (58 loc) · 1.64 KB
/
V18 Get-BootTimes.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
## Best Practices for writing functions
# Single purpose
# Naming convention
# Go for advanced fucntions
# Document your code and add comments
# Output objects
# Test
function Get-BootTimes {
<#
.SYNOPSIS
Get the boot time and total uptime of machines.
.DESCRIPTION
This function will retrieve the last time a machine was booted and calculate total uptime.
.PARAMETER ComputerName
Array of one or more machine names.
.PARAMETER Path
Array of one or more machine names.
.INPUTS
System.String. You can pipe string objects to Get-BootTimes.
.OUTPUTS
Array of PSCustom objects
.EXAMPLE
Get-BootTimes -ComputerName 'DC1','DC2'
.EXAMPLE
'DC1','DC2' | Get-BootTimes
.EXAMPLE
Get-ADComputer -Filter * | Select-Object -ExpandProperty Name | Get-BootTimes
#>
[CmdletBinding()]
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string[]]$ComputerName
)
# optional pre-processing block (initialization)
begin {
$result = @()
}
# mandatory processing block (executes for each object in pipeline)
process {
foreach($computer in $ComputerName){
$os = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $computer
[PSCustomObject]$boot = @{
ComputerName = $computer
LastBoot = $os.LastBootUpTime
UpTime = (Get-Date) - $os.LastBootUpTime
}
$result += $boot
}
}
# optional post-processing block (cleanup)
end {
return $result
}
}