如何获取远程计算机的时间

作者: Edengundam(马涛)

获得本地计算机时间很容易, 使用cmdlet: Get-Date即可.

PS C :>  Get - Date

2007年9月25日 
10 : 44 : 12

但是, 如果您想获得远程计算上的时间恐怕就没有这么容易了. 幸亏PowerShell无缝集成了WMI, 因此, 我们可以通过WMI来进行尝试.
注意到WMI中的类win32_localtime可以获得计算机上的时间, 我们先在本地计算机上实验一把:

PS C :>  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         
:  COMPUTER - NAME
__NAMESPACE      
:  root cimv2
__PATH           
:   / COMPUTER - NAME root cimv2 : Win32_LocalTime = @
Day              
:   25
DayOfWeek        
:   2
Hour             
:   10
Milliseconds     
:
Minute           
:   50
Month            
:   9
Quarter          
:   3
Second           
:   39
WeekInMonth      
:   5
Year             
:   2007

这是我本地计算机上的时间信息, 可是这些时间信息被独立存储在不同的属性中. 我们只好利用PowerShell的格式化命令把这些信息重新组织成我们期望的样式:

PS C :>   $dt   =  Get - WmiObject  - Class win32_localtime
PS C
:>   " {0:00}/{1:00}/{2} {3:00}:{4:00}:{5:00} "   - $dt . month , $dt . day , $dt . year , $dt . hour , $dt . minute , $dt . second
09 / 25 / 2007   10 : 54 : 21

我们这次使用PowerShell中的格式运算符-f, 这个运算符其实就是.Net类库中的String中的Format方法.
{0:00}中第一个"0"表示参数中的索引, 而冒号后面的两个"0"表示对数值的格式化.
这个代码有些长, 让人感觉很冗余, 还有更好的办法吗??让我们试试利用DateTime数据类型的构造函数来试试:

PS C :>  New - Object DateTime  $dt . year , $dt . month , $dt . day , $dt . hour , $dt . minute , $dt . second

2007年9月25日 
10 : 54 : 21

DateTime的构造函数中, 输入六个参数, 分别表示年月日, 时分秒.  现在我们来看看如何请求远程计算机上的时间. 我们先来观察下Get-WmiObject有哪些参数能够帮助我们完成任务.
Get-Help -Full Get-WmiObject命令可以查看命令的详细帮助信息. 我们可以用Get-Credential来输入用户登录的帐户和密码. 例如:

PS C :>   $cred   =  Get - Credential Administrator
PS C
:>

执行此命令后, 你会看到提示输入密码的窗口弹出. 将这个命令返回的对象保存到变量$cred中. 接下来, 我们就要访问远程计算机了:

PS C :>   $dt   =  Get - WmiObject  - Class win32_localtime  - ComputerName test - server  - Credential  $cred
PS C
:>   $dt

__GENUS          
:   2
__CLASS          
:  Win32_LocalTime
__SUPERCLASS     
:  Win32_CurrentTime
__DYNASTY        
:  Win32_CurrentTime
__RELPATH        
:  Win32_LocalTime = @
__PROPERTY_COUNT 
:   10
__DERIVATION     
:  {Win32_CurrentTime}
__SERVER         
:  TEST - SERVER
__NAMESPACE      
:  root cimv2
__PATH           
:   / TEST - SERVER root cimv2 : Win32_LocalTime = @
Day              
:   25
DayOfWeek        
:   2
Hour             
:   11
Milliseconds     
:
Minute           
:   9
Month            
:   9
Quarter          
:   3
Second           
:   9
WeekInMonth      
:   5
Year             
:   2007

PS C
:>  New - Object DateTime  $dt . year , $dt . month , $dt . day , $dt . hour , $dt . minute , $dt . second

2007年9月25日 
11 : 09 : 09

cmdlet Get-WmiObject中的形参: -ComputerName用于指定计算机名称或IP地址. -Credential参数指定了之前的登录信息, 此处我们使用了变量$cred.
最后要说一下, WMI中包括了很多的类, 包含了各种操作系统信息, 但是不同版本的操作系统之间支持的类是不同. 一般来说越靠后的版本支持的越多, 不过, 如果该版本操作系统不支持该类, 你会收到必要的错误信息.
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值