仅从 NET TIME 命令获取小时和分钟的 Powershell 脚本
Powershell script to get only Hour and Minute from NET TIME command
我正在尝试从 PowerShell 脚本中仅检索日期和时间,以下是我到目前为止所做的尝试:
脚本:
NET TIME \ComputerName | Out-File $location
(Get-Content $location) | % {
if ($_ -match "2018 : (.*)") {
$name = $matches[1]
echo $name
}
}
net time
输出如下:
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.
我只需要当地时间“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检索来自远程计算机的date/time和时区信息;可以在 this TechNet PowerShell Gallery page 找到示例。使用 Win32_LocalTime
class,根据 Win32_TimeZone
class 进行调整,将以易于转换为 [DateTime]
的形式提供信息,以供进一步使用你的脚本。
我知道如果您没有启用 PowerShell 远程处理,这可能对您不起作用,但如果启用了,我会这样做。
Invoke-Command -ComputerName ComputerName -ScriptBlock {(Get-Date).ToShortTimeString()}
简介
您可以使用此功能获取您想要的任何信息。我改编了 this script 中的代码。它将使用 Get-WmiObject
获得的 LocalDateTime
值转换为 DateTime
对象。此后,您可以对日期信息做任何您想做的事情。您还可以调整它以使用您想要的任何 DateTime 变量(即上次启动时间)。
代码
function Get-RemoteDate {
[CmdletBinding()]
param(
[Parameter(
Mandatory=$True,
ValueFromPipeLine=$True,
ValueFromPipeLineByPropertyName=$True,
HelpMessage="ComputerName or IP Address to query via WMI"
)]
[string[]]$ComputerName
)
foreach($computer in $ComputerName) {
$timeZone=Get-WmiObject -Class win32_timezone -ComputerName $computer
$localTime=([wmi]"").ConvertToDateTime((Get-WmiObject -Class Win32_OperatingSystem -ComputerName $computer).LocalDateTime)
$output=[pscustomobject][ordered]@{
'ComputerName'=$computer;
'TimeZone'=$timeZone.Caption;
'Year'=$localTime.Year;
'Month'=$localTime.Month;
'Day'=$localTime.Day;
'Hour'=$localTime.Hour;
'Minute'=$localTime.Minute;
'Seconds'=$localTime.Second;
}
Write-Output $output
}
}
使用以下任一方法调用函数。第一个用于单台计算机,第二个用于多台计算机。
Get-RemoteDate "ComputerName"
Get-RemoteDate @("ComputerName1", "ComputerName2")
我正在尝试从 PowerShell 脚本中仅检索日期和时间,以下是我到目前为止所做的尝试:
脚本:
NET TIME \ComputerName | Out-File $location
(Get-Content $location) | % {
if ($_ -match "2018 : (.*)") {
$name = $matches[1]
echo $name
}
}
net time
输出如下:
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.
我只需要当地时间“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检索来自远程计算机的date/time和时区信息;可以在 this TechNet PowerShell Gallery page 找到示例。使用 Win32_LocalTime
class,根据 Win32_TimeZone
class 进行调整,将以易于转换为 [DateTime]
的形式提供信息,以供进一步使用你的脚本。
我知道如果您没有启用 PowerShell 远程处理,这可能对您不起作用,但如果启用了,我会这样做。
Invoke-Command -ComputerName ComputerName -ScriptBlock {(Get-Date).ToShortTimeString()}
简介
您可以使用此功能获取您想要的任何信息。我改编了 this script 中的代码。它将使用 Get-WmiObject
获得的 LocalDateTime
值转换为 DateTime
对象。此后,您可以对日期信息做任何您想做的事情。您还可以调整它以使用您想要的任何 DateTime 变量(即上次启动时间)。
代码
function Get-RemoteDate {
[CmdletBinding()]
param(
[Parameter(
Mandatory=$True,
ValueFromPipeLine=$True,
ValueFromPipeLineByPropertyName=$True,
HelpMessage="ComputerName or IP Address to query via WMI"
)]
[string[]]$ComputerName
)
foreach($computer in $ComputerName) {
$timeZone=Get-WmiObject -Class win32_timezone -ComputerName $computer
$localTime=([wmi]"").ConvertToDateTime((Get-WmiObject -Class Win32_OperatingSystem -ComputerName $computer).LocalDateTime)
$output=[pscustomobject][ordered]@{
'ComputerName'=$computer;
'TimeZone'=$timeZone.Caption;
'Year'=$localTime.Year;
'Month'=$localTime.Month;
'Day'=$localTime.Day;
'Hour'=$localTime.Hour;
'Minute'=$localTime.Minute;
'Seconds'=$localTime.Second;
}
Write-Output $output
}
}
使用以下任一方法调用函数。第一个用于单台计算机,第二个用于多台计算机。
Get-RemoteDate "ComputerName"
Get-RemoteDate @("ComputerName1", "ComputerName2")