Powershell:将日期更改为int?

Powershell:将日期更改为int?,powershell,Powershell,我有一个cmdlet,它希望日期为int32,而不是标准化输入 Set CTXGroupPolicyConfiguration,RebootScheduleStartDate需要int32-输入。例如,如果我手动将其输入到策略中,它将在明天,1/18/2015作为132055314。这个数字所指的内容都是空白的。这很有趣。我找到了这个网站,在那里他们描述了日期是如何作为dword(uint32)值存储在注册表中的。dword值的创建方式如下: 日期分为年、月和日期 每个值都转换为十六进制值 十六

我有一个cmdlet,它希望日期为
int32
,而不是标准化输入


Set CTXGroupPolicyConfiguration
RebootScheduleStartDate
需要
int32
-输入。例如,如果我手动将其输入到策略中,它将在明天,
1/18/2015
作为
132055314
。这个数字所指的内容都是空白的。

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

  • 日期分为年、月和日期
  • 每个值都转换为十六进制值
  • 十六进制值在模式
    yyyyymmdd
  • 组合的十六进制值转换为十进制
  • 我创建了两个函数来转换日期:

    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
    

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

  • 日期分为年、月和日期
  • 每个值都转换为十六进制值
  • 十六进制值在模式
    yyyyymmdd
  • 组合的十六进制值转换为十进制
  • 我创建了两个函数来转换日期:

    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
    

    我知道这是一篇可笑的老帖子,但它是谷歌上对“powershell获取日期为int”的最高回应


    我知道这是一篇可笑的老帖子,但它是谷歌上对“powershell获取日期为int”的最高回应


    首先要做的是找出它的增量。如果你在2015年1月19日投入,你会得到什么?每天增加1。2015年1月19日是132055315。首先要做的是找出它的增量。如果你在2015年1月19日投入,你会得到什么?每天增加1。2015年1月19日是132055315。令人印象深刻的弗罗德F。!非常感谢。令人印象深刻的弗罗德F。!非常感谢。这是必要的吗?对于我们正在做的事情是的,这就是为什么我们在寻找如何做到这一点。您可以从注册表中获取dword值并将十六进制转换为整数,但如果您跨越月份边界,则无法对整数进行计算。addDays是必要的吗?对于我们正在做的事情,是的,这也是我们正在寻找如何做的原因。您可以从注册表中获取dword值并将十六进制转换为int,但如果您跨越了月份边界,则无法对int进行计算。