Ошибка выполнения вашей команды говорит о том, что текущая культура ([cultureinfo]::CurrentCulture
) во время выполнения является чем-то другим , чем en-US
(американский-английский), в этом случае Get-Date
не распознает строку даты / времени, такую как "7/21/2018 7:07 AM
[1] .
Решение состоит в том, чтобы использовать [datetime]
приведение напрямую , без привлечения Get-Date
, потому что [datetime]
cast всегда использует инвариантную культуру , которая подобна культура en-US
в отношении форматов даты / времени:
$DR.Item($property.Name) = ([datetime] ($property.value -replace ' UTC$')) -f "MM/d/yyyy HH:mm:ss"
Предупреждение : Ваш вызов .ToLocalTime()
не нужен для форматирования вывода, как экземпляр [datetime]
вы получите, как по умолчанию, локальное время будет вести себя локально, даже если технически оно не зависит от часового пояса, что отражено в его свойстве .Kind
, содержащем Unspecified
.То есть ваши выходные данные будут отражать дату и время UTC без указания этого.
Если вы действительно хотите перевести входную метку времени UTC в эквивалентное местное время, потребуется дополнительная работа:
$dtUtc = [datetime]::SpecifyKind(($property.value -replace ' UTC$'), 'Utc')
$DR.Item($property.Name) = $dtUtc.ToLocalTime() -f "MM/d/yyyy HH:mm:ss"
[1] PowerShell обычно использует инвариантную культуру , когда дело доходит до преобразования типов из строки в строку, но, что любопытно, не делает этогопри передаче строк в виде аргументов в скомпилированных командлетов , в отличие от [advanced] функций (написано в PowerShell).Это известная проблема , но она может быть не решена из-за обратной совместимости.