获得本地计算机时间很容易, 使用cmdlet: Get-Date即可
PS C:\Users\Administrator> Get-Date
2011年6月15日 14:09:28
但是, 如果您想获得远程计算上的时间恐怕就没有这么容易了. 幸亏PowerShell无缝集成了WMI, 因此, 我们可以通过WMI来进行尝试.
注意到WMI中的类win32_localtime可以获得计算机上的时间, 我们先在本地计算机上实验一把:
注意到WMI中的类win32_localtime可以获得计算机上的时间, 我们先在本地计算机上实验一把:
PS C:\Users\Administrator> Get-WmiObject -Class win32_localtime
__GENUS : 2
__CLASS : Win32_LocalTime
__SUPERCLASS : Win32_CurrentTime
__DYNASTY : Win32_CurrentTime
__RELPATH : Win32_LocalTime=@
__PROPERTY_COUNT : 10
__DERIVATION : {Win32_CurrentTime}
__SERVER : HUBING
__NAMESPACE : root\cimv2
__PATH : \\HUBING\root\cimv2:Win32_LocalTime=@
Day : 15
DayOfWeek : 3
Hour : 14
Milliseconds :
Minute : 9
Month : 6
Quarter : 2
Second : 52
WeekInMonth : 3
Year : 2011
这是我本地计算机上的时间信息, 可是这些时间信息被独立存储在不同的属性中. 我们只好利用PowerShell的格式化命令把这些信息重新组织成我们期望的样式:
PS C:\Users\Administrator>
$dt
=
Get
-
WmiObject
-
Class win32_localtime
PS C:\Users\Administrator> " {0:00}/{1:00}/{2} {3:00}:{4:00}:{5:00} " - f $dt . month , $dt . day , $dt . year , $dt . hour , $dt . minute , $dt . second
PS C:\Users\Administrator> " {0:00}/{1:00}/{2} {3:00}:{4:00}:{5:00} " - f $dt . month , $dt . day , $dt . year , $dt . hour , $dt . minute , $dt . second
06/15/2011 14:10:19
使用PowerShell中的格式运算符-f, 这个运算符其实就是.Net类库中的String中的Format方法.
{0:00}中第一个"0"表示参数中的索引, 而冒号后面的两个"0"表示对数值的格式化.
这个代码有些长, 让人感觉很冗余, 还有更好的办法吗??让我们试试利用DateTime数据类型的构造函数来试试:
{0:00}中第一个"0"表示参数中的索引, 而冒号后面的两个"0"表示对数值的格式化.
这个代码有些长, 让人感觉很冗余, 还有更好的办法吗??让我们试试利用DateTime数据类型的构造函数来试试:
PS C:\Users\Administrator> New-Object DateTime $dt.year,$dt.month,$dt.day,$dt.hour,$dt.minute,$dt.second
2011年6月15日 14:10:19
DateTime的构造函数中, 输入六个参数, 分别表示年月日, 时分秒. 现在我们来看看如何请求远程计算机上的时间. 我们先来观察下Get-WmiObject有哪些参数能够帮助我们完成任务.
Get-Help -Full Get-WmiObject命令可以查看命令的详细帮助信息. 我们可以用Get-Credential来输入用户登录的帐户和密码. 例如:
Get-Help -Full Get-WmiObject命令可以查看命令的详细帮助信息. 我们可以用Get-Credential来输入用户登录的帐户和密码. 例如:
PS C:\Users\Administrator> $cred = Get-Credential Administrator
执行此命令后, 你会看到提示输入密码的窗口弹出. 将这个命令返回的对象保存到变量$cred中. 接下来, 我们就要访问远程计算机了:
PS C:\Users\Administrator> $dt = Get-WmiObject -Class win32_localtime -ComputerName 192.168.75.48 -Credential $cred
PS C:\Users\Administrator> $dt
__GENUS : 2
__CLASS : Win32_LocalTime
__SUPERCLASS : Win32_CurrentTime
__DYNASTY : Win32_CurrentTime
__RELPATH : Win32_LocalTime=@
__PROPERTY_COUNT : 10
__DERIVATION : {Win32_CurrentTime}
__SERVER : EDWARD
__NAMESPACE : root\cimv2
__PATH : \\EDWARD\root\cimv2:Win32_LocalTime=@
Day : 15
DayOfWeek : 3
Hour : 7
Milliseconds :
Minute : 12
Month : 6
Quarter : 2
Second : 9
WeekInMonth : 3
Year : 2011
注意:获取远程服务器信息的过程可能会比较慢(和网络情况有关)。
cmdlet Get-WmiObject中的形参: -ComputerName用于指定计算机名称或IP地址. -Credential参数指定了之前的登录信息, 此处我们使用了变量$cred.
最后要说一下, WMI中包括了很多的类, 包含了各种操作系统信息, 但是不同版本的操作系统之间支持的类是不同. 一般来说越靠后的版本支持的越多, 不过, 如果该版本操作系统不支持该类, 你会收到必要的错误信息.
最后要说一下, WMI中包括了很多的类, 包含了各种操作系统信息, 但是不同版本的操作系统之间支持的类是不同. 一般来说越靠后的版本支持的越多, 不过, 如果该版本操作系统不支持该类, 你会收到必要的错误信息.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8183550/viewspace-698006/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8183550/viewspace-698006/