0

我正在尝试仅从 PowerShell 脚本中检索日期和时间,以下是我到目前为止所尝试的:

脚本:

NET TIME \\ComputerName | Out-File $location

(Get-Content $location)  | % {
    if ($_ -match "2018 : (.*)") {
        $name = $matches[1]
        echo $name
    }
}

net time输出如下:

\\计算机名的当前时间是 1/3/2018 1:05:51 PM

本地时间 (GMT-07:00) 在 \\Computer Name 是 1/3/2018 11:05:51 AM

命令成功完成。

我只需要当地时间“11:05”的部分。

4

4 回答 4

2

虽然Get-Date不支持查询远程计算机,但可以使用 WMI 检索远程计算机的日期/时间和时区信息;可以在此 TechNet PowerShell 库页面中找到一个示例。使用Win32_LocalTime基于类进行调整的Win32_TimeZone类,将以一种易于转换为[DateTime]供脚本进一步使用的形式提供信息。

于 2018-01-03T19:01:52.337 回答
0

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

Invoke-Command -ComputerName ComputerName -ScriptBlock {(Get-Date).ToShortTimeString()}
于 2018-01-03T19:05:31.537 回答
0

使用 -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
于 2018-01-03T18:50:33.633 回答
0

简短的

您可以使用此功能来获取您想要的任何信息。我改编了这个脚本的代码。它将LocalDateTime使用获得的值Get-WmiObject转换为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")
于 2018-01-03T19:11:48.770 回答