Regex Powershell脚本仅从NET TIME命令获取小时和分钟

Regex Powershell脚本仅从NET TIME命令获取小时和分钟,regex,windows,powershell,time,ob-get-contents,Regex,Windows,Powershell,Time,Ob Get Contents,我正在尝试从PowerShell脚本中仅检索日期和时间,以下是我迄今为止尝试的内容: 脚本: NET TIME \\ComputerName | Out-File $location (Get-Content $location) | % { if ($_ -match "2018 : (.*)") { $name = $matches[1] echo $name } } 净时间输出如下: Current time at \\Computer

我正在尝试从PowerShell脚本中仅检索日期和时间,以下是我迄今为止尝试的内容:

脚本:

NET TIME \\ComputerName | Out-File $location

(Get-Content $location)  | % {
    if ($_ -match "2018 : (.*)") {
        $name = $matches[1]
        echo $name
    }
}
净时间
输出如下:

Current time at \\Computer Name is 1/3/2018 1:05:51 PM Local time (GMT-07:00) at \\Computer Name is 1/3/2018 11:05:51 AM The command completed successfully. 当前时间\\Computer Name为2018年1月3日下午1:05:51 当地时间(GMT-07:00)在\\计算机名称为2018年1月3日上午11:05:51 命令已成功完成。 我只需要本地时间“11:05”中的部分。

使用-match测试正则表达式 然后使用自动生成的$matches数组检查匹配项

PS> "Current time at \Computer Name is 1/3/2018 1:05:51 PM Local time (GMT-07:00) at \Computer Name is 1/3/2018 11:05:51 AM" -match '(\d\d:\d\d):'
True
PS> $matches
Name                           Value
----                           -----
1                              11:05
0                              11:05:

PS> $matches[1]
11:05
使用-match测试正则表达式 然后使用自动生成的$matches数组检查匹配项

PS> "Current time at \Computer Name is 1/3/2018 1:05:51 PM Local time (GMT-07:00) at \Computer Name is 1/3/2018 11:05:51 AM" -match '(\d\d:\d\d):'
True
PS> $matches
Name                           Value
----                           -----
1                              11:05
0                              11:05:

PS> $matches[1]
11:05

虽然
Get Date
不支持查询远程计算机,但是可以使用WMI从远程计算机检索日期/时间和时区信息;有关示例,请访问。使用基于
Win32\u时区
类调整的
Win32\u LocalTime
类,将以易于转换为
[DateTime]
的形式提供信息,以便在脚本中进一步使用。

尽管
Get Date
不支持查询远程计算机,可以使用WMI检索来自远程计算机的日期/时间和时区信息;有关示例,请访问。使用基于
Win32\u时区
类调整的
Win32\u LocalTime
类,将以易于转换为
[DateTime]
的形式提供信息,以便在脚本中进一步使用。

我意识到如果未启用PowerShell远程处理,这可能对您不起作用,但如果是的话,我会这样做

Invoke-Command -ComputerName ComputerName -ScriptBlock {(Get-Date).ToShortTimeString()}

我意识到,如果您没有启用PowerShell远程处理,这可能不适用于您,但如果是,我会这样做

Invoke-Command -ComputerName ComputerName -ScriptBlock {(Get-Date).ToShortTimeString()}
简明的 您可以使用此函数获取所需的任何信息。我从中改编了代码。它将使用
Get WmiObject
获得的
LocalDateTime
值转换为
DateTime
对象。此后,您可以根据需要对日期信息执行任何操作。您还可以对此进行调整,以使用所需的DateTime变量(即上次启动时间)


代码 使用以下任一方法调用函数。第一种适用于单台计算机,第二种适用于多台计算机

Get-RemoteDate "ComputerName"
Get-RemoteDate @("ComputerName1", "ComputerName2")
简明的 您可以使用此函数获取所需的任何信息。我从中改编了代码。它将使用
Get WmiObject
获得的
LocalDateTime
值转换为
DateTime
对象。此后,您可以根据需要对日期信息执行任何操作。您还可以对此进行调整,以使用所需的DateTime变量(即上次启动时间)


代码 使用以下任一方法调用函数。第一种适用于单台计算机,第二种适用于多台计算机

Get-RemoteDate "ComputerName"
Get-RemoteDate @("ComputerName1", "ComputerName2")

你为什么要这么做?您的计算机不是正在与附近的域控制器同步时钟吗?我需要它来执行另一个命令“Dumplog”,它只将开始时间和结束时间作为参数。命令:dumplog ctisvr/bt“Local time”/m“cstauniversalfailureconfident”因此我需要服务器的本地时间来运行最后5分钟。为什么需要这样做?您的计算机不是正在与附近的域控制器同步时钟吗?我需要它来执行另一个命令“Dumplog”,它只将开始时间和结束时间作为参数。命令:dumplog ctisvr/bt“Local time”/m“cstauniversalfailureconfident”因此我需要服务器的本地时间来运行最后5分钟。此命令不起作用,它给出的是时间,但不是服务器的本地时间:(我应该进行更多测试,但我的所有机器都在一个时区。我修改了答案,将时间转换为远程机器上的字符串,现在应该可以工作了。是否仍要以24小时格式显示结果?
“{0:HH:mm}”-f[datetime]$x
使用了这个。现在它工作了。这个不工作,它给出的是时间,但不是服务器的本地时间:(我应该进行更多测试,但我的所有机器都在一个时区。我修改了答案,将时间转换为远程机器上的字符串,现在应该可以工作了。是否仍要以24小时格式显示结果?
“{0:HH:mm}”-f[datetime]$x
使用了这个。现在它工作了。我正在尝试为我的多台计算机列表实现它。@prashanthtv第二个调用正是这样做的。它需要一个字符串数组并在它上面循环。我正在尝试为我的多台计算机列表实现它。@prashanthtv第二个调用正是这样做的。它需要一个字符串数组并在它上面循环