Скрипт Powershell для получения только часа и минуты из команды NET TIME
Я пытаюсь получить только дату и время из скрипта PowerShell. Ниже приведено то, что я пробовал до сих пор:
Автор сценария:
NET TIME \\ComputerName | Out-File $location
(Get-Content $location) | % {
if ($_ -match "2018 : (.*)") {
$name = $matches[1]
echo $name
}
}
net time
вывод как ниже:
Текущее время в \\ Имя компьютера - 03.01.2008 13:05:51 Местное время (GMT-07:00) в \\ Имя компьютера - 01.01.08 11:05:51 Команда выполнена успешно.
Мне нужна только часть по местному времени "11:05".
4 ответа
Используйте -match для проверки регулярных выражений. Затем проверьте совпадения с помощью автоматически сгенерированного массива $match.
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; Пример можно найти на этой странице TechNet PowerShell Gallery. С использованием Win32_LocalTime
класс, скорректированный на основе Win32_TimeZone
класс, предоставит информацию в форме, которая легко преобразуется в [DateTime]
для дальнейшего использования в вашем скрипте.
Я понимаю, что это может не сработать, если вы не включили удаленное взаимодействие PowerShell, но если это так, я бы сделал это следующим образом.
Invoke-Command -ComputerName ComputerName -ScriptBlock {(Get-Date).ToShortTimeString()}
краткое
Вы можете использовать эту функцию, чтобы получить любую информацию, которую вы хотите. Я адаптировал код из этого скрипта. Преобразует 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")