【问题标题】:Convert string expression to date type in PowerShell在 PowerShell 中将字符串表达式转换为日期类型
【发布时间】:2021-06-07 10:02:56
【问题描述】:

我在 PS 中有以下代码:

Connect-AzureAD 
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent 
Get-AzureADUser -All:$true |Select ObjectId,UserPrincipalName,@{Name='ExpirationDate'; Expression={(Get-AzureADUserExtension -ObjectId $_.ObjectId).Get_Item("createdDateTime")}} 
| Export-CSV "$PSScriptRoot\userslist.csv"
Disconnect-AzureAD

我想将字符串 createdDateTime 转换为 dateTime 格式,因此我可以向其添加 +60 天 (.AddDays(60))。我试过不转换,但没有用。

Expression={(...).Get_Item("createdDateTime")}}

我也尝试了函数 [datetime]::ParseExact 但我做错了(控制台中没有错误),因为输出中的列是空白的。

请指教

编辑 这是我运行 Pamela 给出的整个脚本后得到的。控制台没有错误。任何想法为什么会这样?

【问题讨论】:

  • 您能否发布一个createdDateTime 的示例值,以便我们知道需要解析哪些值?
  • 我在输出中得到了这样的CreationDate : 19.10.2020 13:55:29
  • 我根本不相信createdDateTime 是一个字符串。这就是它被字符串化以供显示的方式。你能做一个Get_Item("createdDateTime").GetType() 请确认它不是一个 DateTime 对象吗?
  • @Theo 我做到了。它显示 System.String 类型

标签: azure powershell


【解决方案1】:

尝试使用您的代码并获得时间,它看起来像“2/16/2021 5:55:03 AM”:

所以我用'M/d/yyyy H:mm:ss tt'格式化字符串。

$string = "2/16/2021 5:55:03 AM"
[Datetime]::ParseExact($string, 'M/d/yyyy H:mm:ss tt', $null)

正如您在评论中所说,您的 CreationDate 就像“19.10.2020 13:55:29”,所以d.M.yyyy H:mm:ss 应该可以工作(不确定您的 M 或 MM,您可以查看更多 CreationDate)。

格式化日期时间并添加 60 天:

Get-AzureADUser -All:$true |Select ObjectId,UserPrincipalName,@{Name='ExpirationDate'; Expression={[Datetime]::ParseExact((Get-AzureADUserExtension -ObjectId $_.ObjectId).Get_Item("createdDateTime"), 'd.M.yyyy H:mm:ss', $null).AddDays(60)}}

【讨论】:

  • 是的,我知道如何为一个字符串执行此操作,但我想将其用于整个输出(列) - 将函数 [Datetime]::ParseExact 包含到 Expression={(...).Get_Item("createdDateTime")}} 并添加 +60 天。这个可以吗?
  • @Jaxer 当然可以,试试这样Get-AzureADUser -All:$true |Select ObjectId,UserPrincipalName,@{Name='ExpirationDate'; Expression={[Datetime]::ParseExact((Get-AzureADUserExtension -ObjectId $_.ObjectId).Get_Item("createdDateTime"), 'M/d/yyyy H:mm:ss tt', $null).AddDays(60)}}
  • 这是我在帖子中提到的问题。如果我这样做,我会得到ExpiratonDate 空白列:/。请问还有什么建议吗?
  • 这是因为格式不适合你的。正如您在评论中所说,您的 CreationDate 就像“19.10.2020 13:55:29”,所以M.d.yyyy H:mm:ss 应该可以工作(不确定您的 M 或 MM,您可以查看更多 CreationDate)。我已经编辑了我的答案以分享屏幕截图,最后一个添加天数的屏幕在另一台计算机上进行了测试,因此格式不同。
  • 是的,就是这样。我刚刚弄清楚并删除了评论。应该是d.M.yyyy H:mm:ss。问题解决了。谢谢你:)
猜你喜欢
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多