Powershell:将日期更改为 int?

Powershell: Change date to int?

我有一个 cmdlet 需要 int32 作为日期而不是规范化输入。

Set-CTXGroupPolicyConfigurationRebootScheduleStartDate 需要 int32-输入。例如,如果我手动将其输入到策略中,明天 1/18/2015132055314。不知道这个数字指的是什么。

这很有趣。我找到了这个 Citrix Support 网站,他们在其中描述了如何将日期存储为注册表中的 dword (uint32) 值。双字值的创建方式如下:

  1. 日期分为年月日
  2. 每个值都转换为十六进制值
  3. 十六进制值(16 位年、8 位月、8 位日)以模式 yyyyMMdd
  4. 组合
  5. 组合的十六进制值转换为十进制

我创建了几个函数来为您转换日期:

function ConvertFrom-DwordDate([int32]$DwordValue) {
    #Ex. $DwordValue = 132055314
    #Convert to hex with 8 chars (16bit year + 8bit month + 8bit day)
    $hex = $DwordValue.ToString('X8')
    #Ex. $hex = 0x07df0112 = 0x07df(year) 0x01 (month) 0x12 (day)

    #Convert to date string
    $datestring = '{0:D4}\{1:D2}\{2:D2}' -f [convert]::ToUInt32($hex.Substring(0,4),16), [convert]::ToUInt32($hex.Substring(4,2),16), [convert]::ToUInt32($hex.Substring(6,2),16)
    #Convert to datetime and output
    $datetime = [datetime]::ParseExact($datestring,'yyyy\MM\dd',$null)
    #Output
    $datetime
}

function ConvertTo-DwordDate([datetime]$Date) {
    #Convert to combined hex
    $combinedhex = '{0:X}{1:X2}{2:X2}' -f $Date.Year, $Date.Month, $Date.Day
    #Convert to decimal
    $decimal = [convert]::ToUInt32($combinedhex,16)
    #Ouput
    $decimal
} 

ConvertTo-DwordDate -Date (Get-Date).AddDays(1)
132055314

ConvertFrom-DwordDate -DwordValue 132055314

søndag 18. januar 2015 00.00.00

我知道这是一个荒谬的旧 post 但它是 Google 上对“powershell get-date as int”的最高响应。

$DateInt = [Int]((Get-Date).addDays(-100).ToString('yyyyMMdd'))