Powershell小技巧之通过EventLog查看近期电脑开机和关机时间

机器开机和关机时写在EventLog中的第一条日志和最后一条日志分别为:6005和6006。

TimeCreated           Id LevelDisplayName Message
-----------           -- ---------------- -------
8/18/2014 9:23:04 AM     6005 Information   The Event log service was started.
8/15/2014 7:03:48 PM     6006 Information   The Event log service was stopped.

所以根据上面的信息很容易得出机器的开机,关机,在线时间,代码为:

Function Get-ComputerUptimeHistory {
 $q='
<QueryList>
 <Query Id="0" Path="System">
  <Select Path="System">*[System[(EventID=6005 or EventID=6006)]]</Select>
 </Query>
</QueryList>'
$events = Get-WinEvent -FilterXml $q
$i=-1
while ( $i+1 -lt $events.length ) {
 if($i -eq -1)
 {
 [PSCustomObject]@{
 StartTime = $events[0].TimeCreated;
 StopTime = $null ;
 UpTime = [datetime]::Now - $events[0].TimeCreated
 }
 }
 else{
 [PSCustomObject]@{
 StartTime = $events[$i+1].TimeCreated;
 StopTime = $events[$i].TimeCreated ;
 UpTime = $events[$i].TimeCreated - $events[$i+1].TimeCreated
 }
 }
 $i += 2
} 

}

输出为:

PS> Get-ComputerUptimeHistory | ft -AutoSize

StartTime       StopTime       UpTime
---------       --------       ------
8/18/2014 9:23:04 AM            2.05:00:22.5891685
8/13/2014 9:30:42 AM 8/15/2014 7:03:48 PM 2.09:33:06
7/22/2014 12:16:09 PM 8/13/2014 9:29:09 AM 21.21:13:00
7/22/2014 9:23:08 AM 7/22/2014 11:26:08 AM 02:03:00
7/17/2014 11:08:57 AM 7/21/2014 6:20:28 PM 4.07:11:31
7/14/2014 9:35:11 AM 7/17/2014 11:07:25 AM 3.01:32:14
7/10/2014 3:01:53 PM 7/14/2014 9:21:48 AM 3.18:19:55
7/8/2014 5:04:02 PM  7/10/2014 2:58:36 PM 1.21:54:34
6/30/2014 9:17:28 AM 7/8/2014 5:01:24 PM  8.07:43:56
6/29/2014 10:24:50 AM 6/29/2014 6:04:09 PM 07:39:19
6/20/2014 9:33:08 AM 6/27/2014 6:18:34 PM 7.08:45:26
6/16/2014 3:05:45 PM 6/20/2014 9:31:16 AM 3.18:25:31
6/12/2014 9:40:05 AM 6/16/2014 3:04:02 PM 4.05:23:57
6/6/2014 2:52:11 PM  6/12/2014 9:37:46 AM 5.18:45:35
6/5/2014 10:55:20 AM 6/6/2014 2:51:09 PM  1.03:55:49
6/5/2014 9:19:38 AM  6/5/2014 10:54:04 AM 01:34:26
6/3/2014 1:33:24 PM  6/4/2014 7:58:58 PM  1.06:25:34
5/30/2014 10:07:06 AM 6/3/2014 1:31:24 PM  4.03:24:18
5/29/2014 5:30:33 PM 5/30/2014 9:41:41 AM 16:11:08
5/29/2014 5:28:57 PM 5/29/2014 5:29:43 PM 00:00:46
5/29/2014 2:52:58 PM 5/29/2014 5:26:57 PM 02:33:59
5/29/2014 2:50:31 PM 5/29/2014 2:51:06 PM 00:00:35
5/27/2014 11:54:43 AM 5/29/2014 2:47:29 PM 2.02:52:46
5/23/2014 5:31:18 PM 5/26/2014 9:16:33 AM 2.15:45:15
5/22/2014 6:00:29 PM 5/23/2014 9:16:45 AM 15:16:16
5/21/2014 4:38:22 PM 5/21/2014 4:40:07 PM 00:01:45
5/21/2014 9:43:59 AM 5/21/2014 4:36:34 PM 06:52:35
5/19/2014 11:27:28 AM 5/21/2014 9:42:32 AM 1.22:15:04
5/19/2014 9:25:56 AM 5/19/2014 9:27:00 AM 00:01:04
5/15/2014 9:23:15 AM 5/15/2014 9:24:16 AM 00:01:01
5/15/2014 11:18:45 AM 5/15/2014 11:19:49 AM 00:01:04
(0)

相关推荐

  • PowerShell小技巧之启动远程桌面连接

    以Windows Server 2012 R2为例,其实非常简单.先启用远程连接: (gwmi -class win32_terminalservicesetting -namespace "root\cimv2\terminalservices").setallowtsconnections(1) 然后再启用几条防火墙规则即可,用PowerShell(需要管理员权限)更显其威武: PS> Get-NetFirewallRule -Name RemoteDesktop* | se

  • PowerShell小技巧之配置机器的静态IP

    家用电脑安装了一台虚拟机,默认没有配置网络,本来是想利用PowerShell启用无线网络,可是安装过程需要在线获取一些文件,所以失败,无奈只能配置静态IP地址了,参考了Ed Wilson的:Use PowerShell to Configure Static IP and DNS Settings $wmi = Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled = 'true'" $wmi.Enable

  • PowerShell小技巧之同时使用可选强制参数

    在下面脚本函数中让可选参数和强制参数必须同时使用. 下面演示当可选参数出现,也必须使用这个强制参数. function Connect-Somewhere { [CmdletBinding(DefaultParameterSetName='A')] param ( [Parameter(ParameterSetName='A',Mandatory=$false)] [Parameter(ParameterSetName='B',Mandatory=$true)] $ComputerName, [

  • Powershell小技巧之屏蔽输出结果

    从PS命令返回的任何结果后,对于任何不重要的结果将其屏蔽是非常重要的. 我们有很多方法去实现它,同时下面介绍两个比较特别的方法.注意下面两行尝试在C盘创建一个新的文件夹:.New-Item将输出这个文件夹的对象,但是当你在创建文件夹时你可能会想屏蔽创建的结果: $null = New-Item -Path c:\newfolderA -ItemType Directory New-Item -Path c:\newfolderB -ItemType Directory | Out-Null 那么

  • PowerShell小技巧之添加远程防火墙规则

    接着昨天的场景,虽然将Windows Server 2012 Core的默认控制台设置成了PowerShell,还启用了远程桌面,但是对于Core版本的服务器来讲,远程桌面形同鸡肋,所以我想启用PowerShell远程访问,在服务器上以管理员权限运行: Enable-PSRemoting -Force 在尝试建立远程连接时,提示访问被拒绝,此时可能是防火墙问题:我需要使用PowerShell添加PowerShell远程防火墙规则: New-NetFirewallRule -Name powers

  • Powershell小技巧之找出最大最小值

    要找出对象的最大最小值,请使用Measure-Object: $list = 1,4,3,1,3,12,990 $result = $list | Measure-Object -Minimum -Maximum $result.Minimum $result.Maximum 它支持多个数据并且还支持不通的数据类型,这里将它小小的修改就能返回WINDOWS目录下最近新创的文件: $list = Get-ChildItem -Path C:\windows $result = $list | Me

  • Powershell小技巧之使用Get-ChildItem得到指定扩展名文件

    当你使用Get-ChildItem获取输出文件列表时,你可能会发现即使用了-Filter参数也会比你预期的结果要多得多. 这里有一个例子,它不仅返回.ps1扩展名文件同时也返回.ps1xml扩展名文件: Get-ChildItem -Path C:\windows -Recurse -ErrorAction SilentlyContinue -Filter *.ps1 为了限制结果集只是你设置后的扩展名,可以添加一个命令的过滤器,以完善的结果: Get-ChildItem -Path C:\wi

  • Powershell小技巧之删除不规则字符

    在路径中,其中有像引号冒号等不规则字符.如果你脚本中的活动路径是来自某段信息,你一定会需要返回符合规则的路径. 这里有段函数教你在任何路径中使用下划线去替换其中不规则部分: function Get-LegalPathName($Path) { $illegalChars = [System.IO.Path]::GetInvalidFileNameChars() foreach($illegalChar in $illegalChars) { $Path = $Path.Replace($ill

  • Powershell小技巧之通过EventLog查看近期电脑开机和关机时间

    机器开机和关机时写在EventLog中的第一条日志和最后一条日志分别为:6005和6006. TimeCreated Id LevelDisplayName Message ----------- -- ---------------- ------- 8/18/2014 9:23:04 AM 6005 Information The Event log service was started. 8/15/2014 7:03:48 PM 6006 Information The Event lo

  • Powershell小技巧之使用Copy-Item添加程序到开机启动

    机器装完Office2013以后,lync默认已经属于自动启动了,此时我想outlook 2013 也能随机器自动启动.将快捷方式复制一下即可: $startUpFolder = "$Env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" $outlook='C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Office 2013\Outlook 2

  • Powershell小技巧之轻松从网上下载文件

    支持所有PS版本 在PS中可以轻松的从网上下载文件.这里有一段代码下载PS说明书(这是一个珍贵并丰富的Powershell文档)自动到你的电脑. 复制代码 代码如下: $link = 'http://download.microsoft.com/download/3/2/6/326DF7A1-EE5B-491B-9130-F9AA9C23C29A/PowerShell%202%200%20Language%20Specification.docx' $outfile = "$env:temp\l

  • Powershell小技巧之查看安装的.Net framework版本信息

    查看当前PowerShell的.Net运行版本 PS> $PSVersionTable.CLRVersion Major Minor Build Revision ----- ----- ----- -------- 4 0 30319 34014 PS> [environment]::Version Major Minor Build Revision ----- ----- ----- -------- 4 0 30319 34014 查看所有安装的.Net 版本 PS> dir '

  • PowerShell小技巧之观察UNC路径

    许多命令能支持UNC路径,但是UNC路径在脚本中看起来很奇怪.看看下面代码: PS> Test-Path -Path \\127.0.0.1\c$ True 它返回了真,证明UNC路径存在.接着改变当前的路径指向一个非文件系统路径接着测试: PS> cd hkcu:\ PS> Test-Path -Path \\127.0.0.1\c$ False 一样的路径但现在却获得了失败.这是因为UNC路径没有包含盘符,而PS需要根据盘符去分配当前合适位置.如果当前路径没有包含在磁盘路径下,Pow

  • Powershell小技巧之使用WMI工具

    WMI是一个强大的技术:只需要简单的指定一个WMI类名就能返回它类的所有实例: 复制代码 代码如下: PS> Get-WmiObject -Class Win32_BIOS SMBIOSBIOSVersion : 76CN27WW Manufacturer      : LENOVO Name              : 76CN27WW SerialNumber      : 1006250300406 Version           : LENOVO - 1 你如何知道它有哪些类呢?这

  • Powershell小技巧之获取MAC地址

    在Powershell中获取MAC地址不是很难.这里就有一种方法: 复制代码 代码如下: PS> getmac /FO CSV | ConvertFrom-Csv Physical Address                        Transport Name                         ----------------                        --------------                         5C-51-4F-6

  • Powershell小技巧之使用Jint引擎在PowerShell中执行Javascript函数

    这里演示如何利用PowerShell将一段Javascript函数字符串交给Jint引擎去执行. 执行Javascript函数 .Net版的Javascript解释器 可以从Git上获取Jint的代码,也可以从nuget上下载Jint的程序集. Jint是一个面向.Net的Javascript解释器.Jint不会把Javascript编译成.Net字节码,所以它非常适用于脚本小且运行起来速度快的工程,或者运行在不同平台上的脚本. PowerShell调用 拿到Dll根据-Path参数直接使用Ad

  • Powershell小技巧之获取当前的时间并转换为时辰

    午时三刻已到,行刑,刀下留人,现在到底是不是午时,能否让PowerShell告诉我呢? 好的, 没问题.从晚上23点到凌晨2点之间属于子时,每两个小时一个时辰,依次为"子丑寅卯辰巳午未申酉戌亥". 函数获取当前时辰 用PowerShell脚本实现: function Get-ChinaTimeAlias { param( [ValidateRange(0,23)] [int]$Hour = (get-date).Hour ) $timeAliasArray='子丑寅卯辰巳午未申酉戌亥'

  • Powershell小技巧之查询AD用户

    假若你登录到了一个AD中你可以轻松的查询AD目录.在先前的技巧中我们阐述了一个基本脚本.这里有一个可以自定义根目录的扩展方法(设置你的查询点),它支持同步查询(而不是递归到一个容器). 它同时也阐述了怎么从一个活动目录查找结果再将其转化成用户对象: $SAMAccountName = 'tobias' $SearchRoot = 'LDAP://OU=customer,DC=company,DC=com' $SearchScope = 'OneLevel' $ldap = "(&(obj

随机推荐