If you have ever wondered how to get last boot time for the list of servers this article will answer that question and many others that pop up on the way.
To get last boot time using PowerShell, we use either WMI or CIM classes, Win32_OperatingSystem or CIM_OperatingSystem respectively.
Table of Contents
Get The Last Boot-Time – Solutions
Here are a few solutions:
Solution 1 – Get The Last Boot-Time From The Local Machine
As mentioned, we will use CIM_OperatingSystem CIM class and Get-CimInstance CmdLet to get the Last Boot Up Time for the local machine:
Get-CimInstance -ComputerName localhost -Class CIM_OperatingSystem -ErrorAction Stop | Select-Object CSName, LastBootUpTime
Here is the result for the local machine:
If we want to see all the properties that CIM_OperatingSystem CIM class returns we can run the following line:
Get-CimInstance -ComputerName localhost -Class CIM_OperatingSystem -ErrorAction Stop | Select-Object *
Here is the resultset with all the properties:
Solution 2 – Get The Last Boot-Time For The List Of Servers (Remote Computers)
Create the list of servers in the text file and save in, for example, C:\Temp folder and run the following command. We basically load the content of the text file using Get-Content CmdLet and PowerShell will go through the list and run the same command as in the previous solution for each server on the list.
Get-CimInstance -ComputerName (Get-Content -Path 'C:\Temp\servers.txt') -Class CIM_OperatingSystem -ErrorAction Stop | Select-Object CSName, LastBootUpTime | Out-GridView
Here is the resultset for the list of servers:
I do not have servers in my home network so in order to simulate one I have created a very simple input list of servers in a text file just copying the localhost value several times.
Solution 3 – Write Own PowerShell CmdLet ( Get-LastBootUpTime )
I have written my own Get-LastBootUpTime CmdLet that I will explain in the minute.
This approach takes a little bit longer time but gives us more benefits in the long run so it is my preferred way and we can combine this CmdLet with the library of CmdLets in Efficiency Booster PowerShell Project.
Here is a sample call to Get-LastBootUpTime CmdLet:
Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose | Select-Object 'Environment', 'Logical Name', 'Server Name', 'OS', 'Last bootup time', 'IP', 'Collected' | Out-GridView
Here is the result of a call to Get-LastBootUpTime CmdLet:
INFO: I have written two PowerShell Add-on functions ( Get-CIMClassProperty and Select-CIMClassAllProperties) that help us working with WMI and CIM classes. First list all the properties and datatypes of WMI or CIM classes and the second one makes the select statements with all the properties for the WMI or CIM class. How To List CIM Or WMI Class All Properties And Their Datatypes With PowerShell AND How To Write Select Statement For All Properties Of CIM Or WMI Class With PowerShell.
Get-LastBootUpTime CmdLet Explained
Get-LastBootUpTime CmdLet collects Last boot time for the list of servers and this CmdLet belongs to Efficiency Booster PowerShell Project. This project is the library of different CmdLets that can help us IT personal to do our everyday tasks more efficiently and accurately.
Source code for Get-LastBootUpTime CmdLet can be downloaded from this zip file so please feel free to download it and it would be easier for you to follow me along.
Get-LastBootUpTime CmdLet is part of Common module and if you have downloaded the source code it can be found in the folder …\[My] Documents\WindowsPowerShell\Modules\03common
INFO: If you want to know how to install and configure Efficiency Booster PowerShell Project files please read the following article: How To Install And Configure PowerShell: CmdLets, Modules, Profiles.
Get-LastBootUpTime CmdLet – Input Parameters
As input parameters we have:
- computers – it is a list of servers passed as input parameter with default value ‘localhost’ and accepts both pipeline options. Parameter belongs to the “ServerNames” parameter set. The “ServerNames” parameter set is the default parameter set.
- filename – it is the name of the text file with the list of servers and represents an alternative option to the “computers” parameter. The parameter belongs to the “FileName” parameter set.
- errorlog – switch datatype and when turned on it will write errors into an external error log file using Write-ErrorLog CmdLet. The error log file is located in the PSLogs folder of [My] Documents.
- client – it is a mandatory input parameter and by convention, I use two letters for client shortcode (for example, OK = O client, BK = B client, etc.). This parameter value is part of the filename parameter naming convention.
- solution – it is a mandatory input parameter and by convention, I use two-three letters for solution shortcode (for example, FIN = Financial solution, HR = HR solution, etc.).
The naming convention for the filename parameter is as follows: Client + Solution + Text.txt. The text file should be located in …[My] Documents\WindowsPowerShell\Modules\01servers folder.
For example:
- OKFINTestServers.txt – List of test environment servers for OK client and FIN solution.
- OKFINProdServers.txt – List of production environment servers for OK client and FIN solution.
- OKFINAllServers.txt – List of all servers for OK client and FIN solution.
INFO: To get a deeper explanation about client and solution input parameters please read these two sections Parameter client, Parameter solution.
INFO: In order to customize the installation of CmdLet to your needs and set up necessary CSV file please read the following article How To Install And Configure PowerShell: CmdLets, Modules, Profiles
Here is the parameters definition code:
Function Get-LastBootUpTime {
[CmdletBinding(DefaultParametersetName="ServerNames")]
param (
[Parameter( ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
ParameterSetName="ServerNames",
HelpMessage="List of computer names separated by commas.")]
[Alias('hosts')]
[string[]]$computers = 'localhost',
[Parameter( ParameterSetName="FileName",
HelpMessage="Name of txt file with list of servers. Txt file should be in 01servers folder.")]
[string]$filename,
[Parameter( Mandatory=$false,
HelpMessage="Write to error log file or not.")]
[switch]$errorlog,
[Parameter(Mandatory=$true,
HelpMessage="Client for example OK = O client, BK = B client")]
[string]$client,
[Parameter(Mandatory=$true,
HelpMessage="Solution, for example FIN = Financial, HR = Human Resource")]
[string]$solution
)
}
INFO: To know more about PowerShell Parameters and Parameter Sets with some awesome examples please read the following articles How To Create Parameters In PowerShell and How To Use Parameter Sets In PowerShell Functions.
INFO: PowerShell Pipelining is a very important concept and I highly recommend you to read the article written on the subject. How PowerShell Pipeline Works. Here I have shown in many examples the real power of PowerShell using the Pipelining.
BEGIN Block
In the BEGIN block we:
- If the FileName parameter set has been used we test if text file with a list of servers exists.
- If the file exists read the file and create the list of servers as a string array in the $computers variable.
- … and if not write a warning with information to the caller to create the file.
BEGIN {
if ( $PsCmdlet.ParameterSetName -eq "FileName") {
if ( Test-Path -Path "$home\Documents\WindowsPowerShell\Modules\01servers\$filename" -PathType Leaf ) {
Write-Verbose "Read content from file: $filename"
$computers = Get-Content( "$home\Documents\WindowsPowerShell\Modules\01servers\$filename" )
} else {
Write-Warning "This file path does NOT exist: $home\Documents\WindowsPowerShell\Modules\01servers\$filename"
Write-Warning "Create file $filename in folder $home\Documents\WindowsPowerShell\Modules\01servers with list of server names."
break;
}
}
}
PROCESS Block
In the PROCESS block we run this block of code for each server passed into the pipeline or read from the text file:
- We replace the localhost default value for the local server with the actual name of the local machine.
- We use Get-ComputerInfo CmdLet to read additional data about each server (name, environment, logical name, IP address).
- We implement Error Handling using try-catch blocks and writing errors in an external text file using Write-ErrorLog CmdLet.
- We use PowerShell splatting to prepare the input parameters for the next call of Get-CimInstance CmdLet.
- We call CIM class CIM_OperatingSystem using Get-CimInstance CmdLet
- We prepare the resultset of Get-LastBootUpTime CmdLet.
Please notice these two features in the PROCESS block.
Splatting
We have used splatting twice. First when we prepare the call to Get-CimInstance CmdLet, and second when we prepare the resultset.
Splatting helps us to have a more neat and understandable code.
Here is a call to Get-CimInstance CmdLet and use of splatting:
$params = @{ 'ComputerName'=$computer;
'Class'='CIM_OperatingSystem';
'ErrorAction'='Stop'}
$boottime = Get-CimInstance @params |
Select-Object Caption, LastBootUpTime
Here is the second use of splatting when creating the resultset.
$properties = @{ 'Environment'=$env;
'Logical name'=$logicalname;
'Server name'=$computer;
'OS'=$boottime.Caption;
'Last bootup time'=$boottime.LastBootUpTime;
'IP'=$ip;
'Collected'=(Get-Date -UFormat %Y.%m.%d' '%H:%M:%S)}
$obj = New-Object -TypeName PSObject -Property $properties
Type Name Of The Resultset Objects
Notice the name of the resultset (Report.LastBootUpTime).
$obj.PSObject.TypeNames.Insert(0,'Report.LastBootUpTime')
So if we call PowerShell Get-Member CmdLet to get the type of resultset for Get-LastBootUpTime CmdLet we will get Report.LastBootUpTime type and not standard PowerShell PSObject type.
Get-LastBootUpTime -client OK -solution FIN | Get-Member
Here is the resultset:
Type Name of resultset gives us a possibility to further expend the use of resultset. For example, we can use MS SQL Database and create table LastBootUpTime based on resultset type name ( Report.LastBootUpTime ) where we can record the resultset and use MS SQL Reporting Services to show the results collected over a certain period of time.
Here is the PROCESS block source code:
PROCESS {
foreach ($computer in $computers ) {
if ( $computer -eq 'localhost' ) {
$computer = $env:COMPUTERNAME
}
$computerinfo = Get-ComputerInfo -computername $computer -client $client -solution $solution
$hostname = $computerinfo.hostname
$env = $computerinfo.environment
$logicalname = $computerinfo.logicalname
$ip = $computerinfo.ipaddress
try {
Write-Verbose "Processing: $computer - $env - $logicalname"
Write-Verbose "Start CIM_OperatingSystem processing..."
$boottime = $null
$params = @{ 'ComputerName'=$computer;
'Class'='CIM_OperatingSystem';
'ErrorAction'='Stop'}
$boottime = Get-CimInstance @params |
Select-Object Caption, LastBootUpTime
#@{label="Last BootUp Time"; expression={$_.converttodatetime($_.LastBootUpTime)}}
Write-Verbose "Finish CIM_OperatingSystem processing..."
$properties = @{ 'Environment'=$env;
'Logical name'=$logicalname;
'Server name'=$computer;
'OS'=$boottime.Caption;
'Last bootup time'=$boottime.LastBootUpTime;
'IP'=$ip;
'Collected'=(Get-Date -UFormat %Y.%m.%d' '%H:%M:%S)}
$obj = New-Object -TypeName PSObject -Property $properties
$obj.PSObject.TypeNames.Insert(0,'Report.LastBootUpTime')
Write-Output $obj
Write-Verbose "Finished processing: $computer - $env - $logicalname"
} catch {
Write-Warning "Computer failed: $computer - $env - $logicalname"
Write-Warning "Error message: $_"
if ( $errorlog ) {
$errormsg = $_.ToString()
$exception = $_.Exception
$stacktrace = $_.ScriptStackTrace
$failingline = $_.InvocationInfo.Line
$positionmsg = $_.InvocationInfo.PositionMessage
$pscommandpath = $_.InvocationInfo.PSCommandPath
$failinglinenumber = $_.InvocationInfo.ScriptLineNumber
$scriptname = $_.InvocationInfo.ScriptName
Write-Verbose "Start writing to Error log."
Write-ErrorLog -hostname $computer -env $env -logicalname $logicalname -errormsg $errormsg -exception $exception -scriptname $scriptname -failinglinenumber $failinglinenumber -failingline $failingline -pscommandpath $pscommandpath -positionmsg $pscommandpath -stacktrace $stacktrace
Write-Verbose "Finish writing to Error log."
}
}
}
}
INFO: To learn about PowerShell Error Handling and code debugging please read the following articles: How To Log PowerShell Errors And Much More and How To Debug PowerShell Scripts.
END Block
END block is empty.
INFO: To understand BEGIN, PROCESS and END blocks in PowerShell please read PowerShell Function Begin Process End Blocks Explained With Examples.
Comment-Based Help Section
For every one of my own CmdLets, I write Comment-Based help as well.
INFO: If you want to learn how to write comment-based Help for your own PowerShell Functions and Scripts please read these articles How To Write PowerShell Help (Step by Step). In this article How To Write PowerShell Function’s Or CmdLet’s Help (Fast), I explain the PowerShell Add-on that help us to be fast with writing help content.
How To Use Get-LastBootUpTime CmdLet – Tips
To get Last Boot Time for the local machine we just call Get-LastBootUpTime CmdLet and provide values for mandatory parameters (client and solution):
Get-LastBootUpTime -client "OK" -solution "FIN"
Here is the resultset:
As we have seen in the solution section of this article we can call Get-LastBootUpTime CmdLet for the list of servers:
Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose | Select-Object 'Environment', 'Logical Name', 'Server Name', 'OS', 'Last bootup time', 'IP', 'Collected' | Out-GridView
Here is the resultset for the list of servers.
We can PowerShell pipeline result from Get-LastBootUpTime CmdLet into Save-ToExcel CmdLet and get resultset as an Excel Sheet:
Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose | Save-ToExcel -errorlog -ExcelFileName "Get-LastBootUpTime" -title "Get Last bootup time info of servers in Financial solution for " -author "Dejan Mladenovic" -WorkSheetName "Last bootup time" -client "OK" -solution "FIN"
Here is the Excel Sheet result:
Bonus Tip
I have used Get-LastBootUpTime CmdLet combined with Reset Servers CmdLet. For example, when I want to reset the list of servers, I run reset servers CmdLet and if for any reason some servers are not reset I will run again the same reset servers CmdLet but this time only against the servers that have not been reset in the last half an hour since we do not have to reset the servers that have been already reset.
This is just one of many useful examples that show us the efficiency of having the Library of own CmdLets.
Useful PowerShell Last Boot Time Articles
Here are some useful articles and resources:
- Get-CimInstance
- Get-CimClass
- CIM_OperatingSystem class
- Win32_OperatingSystem class
- Computer System Hardware Classes
Get-LastBootUpTime CmdLet Source Code
DISCLAIMER: Get-LastBootUpTime function is part of the Efficiency Booster PowerShell Project and as such utilize other CmdLets that are part of the same project. So the best option for you in order for this function to work without any additional customization is to download the source code of the whole project from here.
INFO: My best advice to every PowerShell scripter is to learn writing own PowerShell Advanced Functions and CmdLets and I have written several articles explaining this, so please read them. How To Create A Custom PowerShell CmdLet (Step By Step). Here I explain how to use PowerShell Add-on Function to be faster in writing PowerShell Functions How To Write Advanced Functions Or CmdLets With PowerShell (Fast).
Here is the source code of the whole Get-LastBootUpTime CmdLet:
<#
.SYNOPSIS
Get last bootup time for list of computers.
.DESCRIPTION
Get last bootup time for list of computers.
IMPORTANT: Restart-Server CmdLet depends on this CmdLet so be aware when you change this CmdLet to check if this change has some implication on Restart-Server CmdLet
List of servers is in txt file in 01servers folderor list of strings with names of computers.
CmdLet has two ParameterSets one for list of computers from file and another from list of strings as computer names.
Errors will be saved in log folder PSLogs with name Error_Log.txt. Parameter errorlog controls logging of errors in log file.
Get-LastBootUpTime function uses CimInstance -Class CIM_OperatingSystem PowerShell function to get Last bootup time info.
Result shows following columns: Environment (PROD, Acceptance, Test, Course...),
Logical Name (Application, web, integration, FTP, Scan, Terminal Server...), Server Name, OS, Last bootup time, IP, Collected
.PARAMETER computers
List of computers that we want to get Last bootup time from. Parameter belongs to default Parameter Set = ServerNames.
.PARAMETER filename
Name of txt file with list of servers that we want to check Last bootup time. .txt file should be in 01servers folder.
Parameter belongs to Parameter Set = FileName.
.PARAMETER errorlog
Switch parameter that sets to write to log or not to write to log. Error file is in PSLog folder with name Error_Log.txt.
.PARAMETER client
OK - O client
BK - B client
etc.
.PARAMETER solution
FIN - Financial solution
HR - Human resource solution
etc.
.EXAMPLE
Get-LastBootUpTime -client "OK" -solution "FIN"
Description
---------------------------------------
Test of default parameter with default value ( computers = 'localhost' ) in default ParameterSet = ServerName.
.EXAMPLE
Get-LastBootUpTime -client "OK" -solution "FIN" -Verbose
Description
---------------------------------------
Test of Verbose parameter. NOTE: Notice how localhost default value of parameter computers replaces with name of server.
.EXAMPLE
'ERROR' | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog
Description
---------------------------------------
Test of errorlog parameter. There is no server with name ERROR so this call will fail and write to Error log since errorlog switch parameter is on. Look Error_Log.txt file in PSLogs folder.
.EXAMPLE
Get-LastBootUpTime -computers 'APP100001' -client "OK" -solution "FIN" -errorlog
Description
---------------------------------------
Test of computers parameter with one value. Parameter accepts array of strings.
.EXAMPLE
Get-LastBootUpTime -computers 'APP100001', 'APP100002' -client "OK" -solution "FIN" -errorlog -Verbose
Description
---------------------------------------
Test of computers parameter with array of strings. Parameter accepts array of strings.
.EXAMPLE
Get-LastBootUpTime -hosts 'APP100002' -client "OK" -solution "FIN" -errorlog
Description
---------------------------------------
Test of computers paramater alias hosts.
.EXAMPLE
Get-LastBootUpTime -computers (Get-Content( "$home\Documents\WindowsPowerShell\Modules\01servers\OKFINservers.txt" )) -client "OK" -solution "FIN" -errorlog -Verbose
Description
---------------------------------------
Test of computers parameter and values for parameter comes from .txt file that has list of servers.
.EXAMPLE
'APP100001' | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog
Description
---------------------------------------
Test of pipeline by value of computers parameter.
.EXAMPLE
'APP100001', 'APP100002' | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog -Verbose
Description
---------------------------------------
Test of pipeline by value with array of strings of computers parameter.
.EXAMPLE
'APP100001', 'APP100002' | Select-Object @{label="computers";expression={$_}} | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog
Description
---------------------------------------
Test of values from pipeline by property name (computers).
.EXAMPLE
Get-Content( "$home\Documents\WindowsPowerShell\Modules\01servers\OKFINkservers.txt" ) | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog -Verbose
Description
---------------------------------------
Test of pipeline by value that comes as content of .txt file with list of servers.
.EXAMPLE
Help Get-LastBootUpTime -Full
Description
---------------------------------------
Test of Powershell help.
.EXAMPLE
Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose
Description
---------------------------------------
This is test of ParameterSet = FileName and parameter filename. There is list of servers in .txt file.
.EXAMPLE
Get-LastBootUpTime -filename "OKFINserverss.txt" -errorlog -client "OK" -solution "FIN" -Verbose
Description
---------------------------------------
This is test of ParameterSet = FileName and parameter filename. This test will fail due to wrong name of the .txt file with warning message "WARNING: This file path does NOT exist:".
.INPUTS
System.String
Computers parameter pipeline both by Value and by Property Name value and has default value of localhost. (Parameter Set = ComputerNames)
Filename parameter does not pipeline and does not have default value. (Parameter Set = FileName)
.OUTPUTS
System.Management.Automation.PSCustomObject
Get-LastBootUpTime returns PSCustomObjects which has been converted from PowerShell function Get-WmiObject -Class Win32_OperatingSystem
Result shows following columns: Environment (PROD, Acceptance, Test, Course...),
Logical name (Application, web, integration, FTP, Scan, Terminal Server...), Server name, OS, Last bootup time, IP, Collected
.NOTES
FunctionName : Get-LastBootUpTime
Created by : Dejan Mladenovic
Date Coded : 10/31/2018 19:06:41
More info : http://improvescripting.com/
.LINK
Get The Last Boot Time Using PowerShell Script
CimInstance -Class Win32_OperatingSystem
CimInstance -Class CIM_OperatingSystem
Restart-Server
#>
Function Get-LastBootUpTime {
[CmdletBinding(DefaultParametersetName="ServerNames")]
param (
[Parameter( ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
ParameterSetName="ServerNames",
HelpMessage="List of computer names separated by commas.")]
[Alias('hosts')]
[string[]]$computers = 'localhost',
[Parameter( ParameterSetName="FileName",
HelpMessage="Name of txt file with list of servers. Txt file should be in 01servers folder.")]
[string]$filename,
[Parameter( Mandatory=$false,
HelpMessage="Write to error log file or not.")]
[switch]$errorlog,
[Parameter(Mandatory=$true,
HelpMessage="Client for example OK = O client, BK = B client")]
[string]$client,
[Parameter(Mandatory=$true,
HelpMessage="Solution, for example FIN = Financial, HR = Human Resource")]
[string]$solution
)
BEGIN {
if ( $PsCmdlet.ParameterSetName -eq "FileName") {
if ( Test-Path -Path "$home\Documents\WindowsPowerShell\Modules\01servers\$filename" -PathType Leaf ) {
Write-Verbose "Read content from file: $filename"
$computers = Get-Content( "$home\Documents\WindowsPowerShell\Modules\01servers\$filename" )
} else {
Write-Warning "This file path does NOT exist: $home\Documents\WindowsPowerShell\Modules\01servers\$filename"
Write-Warning "Create file $filename in folder $home\Documents\WindowsPowerShell\Modules\01servers with list of server names."
break;
}
}
}
PROCESS {
foreach ($computer in $computers ) {
if ( $computer -eq 'localhost' ) {
$computer = $env:COMPUTERNAME
}
$computerinfo = Get-ComputerInfo -computername $computer -client $client -solution $solution
$hostname = $computerinfo.hostname
$env = $computerinfo.environment
$logicalname = $computerinfo.logicalname
$ip = $computerinfo.ipaddress
try {
Write-Verbose "Processing: $computer - $env - $logicalname"
Write-Verbose "Start CIM_OperatingSystem processing..."
$boottime = $null
$params = @{ 'ComputerName'=$computer;
'Class'='CIM_OperatingSystem';
'ErrorAction'='Stop'}
$boottime = Get-CimInstance @params |
Select-Object Caption, LastBootUpTime
#@{label="Last BootUp Time"; expression={$_.converttodatetime($_.LastBootUpTime)}}
Write-Verbose "Finish CIM_OperatingSystem processing..."
$properties = @{ 'Environment'=$env;
'Logical name'=$logicalname;
'Server name'=$computer;
'OS'=$boottime.Caption;
'Last bootup time'=$boottime.LastBootUpTime;
'IP'=$ip;
'Collected'=(Get-Date -UFormat %Y.%m.%d' '%H:%M:%S)}
$obj = New-Object -TypeName PSObject -Property $properties
$obj.PSObject.TypeNames.Insert(0,'Report.LastBootUpTime')
Write-Output $obj
Write-Verbose "Finished processing: $computer - $env - $logicalname"
} catch {
Write-Warning "Computer failed: $computer - $env - $logicalname"
Write-Warning "Error message: $_"
if ( $errorlog ) {
$errormsg = $_.ToString()
$exception = $_.Exception
$stacktrace = $_.ScriptStackTrace
$failingline = $_.InvocationInfo.Line
$positionmsg = $_.InvocationInfo.PositionMessage
$pscommandpath = $_.InvocationInfo.PSCommandPath
$failinglinenumber = $_.InvocationInfo.ScriptLineNumber
$scriptname = $_.InvocationInfo.ScriptName
Write-Verbose "Start writing to Error log."
Write-ErrorLog -hostname $computer -env $env -logicalname $logicalname -errormsg $errormsg -exception $exception -scriptname $scriptname -failinglinenumber $failinglinenumber -failingline $failingline -pscommandpath $pscommandpath -positionmsg $pscommandpath -stacktrace $stacktrace
Write-Verbose "Finish writing to Error log."
}
}
}
}
END {
}
}
#region Execution examples
#Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose | Select-Object 'Environment', 'Logical Name', 'Server Name', 'OS', 'Last bootup time', 'IP', 'Collected' | Out-GridView
<#
#Test ParameterSet = ServerName
Get-LastBootUpTime -client "OK" -solution "FIN"
Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog
Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog -Verbose
Get-LastBootUpTime -computers 'APP100001' -client "OK" -solution "FIN" -errorlog
Get-LastBootUpTime -computers 'APP100001', 'APP100002' -client "OK" -solution "FIN" -errorlog -Verbose
Get-LastBootUpTime -hosts 'APP100001' -client "OK" -solution "FIN" -errorlog
Get-LastBootUpTime -computers (Get-Content( "$home\Documents\WindowsPowerShell\Modules\01servers\OKFINservers.txt" )) -client "OK" -solution "FIN" -errorlog -Verbose
#Pipeline examples
'APP100001' | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog
'APP100001', 'APP100002' | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog -Verbose
'APP100001', 'APP100002' | Select-Object @{label="computers";expression={$_}} | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog
Get-Content( "$home\Documents\WindowsPowerShell\Modules\01servers\OKFINservers.txt" ) | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog -Verbose
'ERROR' | Get-LastBootUpTime -client "OK" -solution "FIN" -errorlog
#Test CmdLet help
Help Get-LastBootUpTime -Full
#SaveToExcel
Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose | Save-ToExcel -errorlog -ExcelFileName "Get-LastBootUpTime" -title "Get Last bootup time info of servers in Financial solution for " -author "Dejan Mladenovic" -WorkSheetName "Last bootup time" -client "OK" -solution "FIN"
#SaveToExcel and send email
Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose | Save-ToExcel -sendemail -errorlog -ExcelFileName "Get-LastBootUpTime" -title "Get Last bootup time info of servers in Financial solution for " -author "Dejan Mladenovic" -WorkSheetName "Last bootup time" -client "OK" -solution "FIN"
#Benchmark
#Time = 3 sec; Total Items = 28
Measure-BenchmarksCmdLet { Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose }
#Time = 3 sec; Total Items = 28
Measure-BenchmarksCmdLet { Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" }
#Test ParameterSet = FileName
Get-LastBootUpTime -filename "OKFINservers.txt" -errorlog -client "OK" -solution "FIN" -Verbose
Get-LastBootUpTime -filename "OKFINserverss.txt" -errorlog -client "OK" -solution "FIN" -Verbose
#>
#endregion