powershell - 将字符串转换为 System.DateTime 为 Office365 的特定格式
问题描述
我遇到了将用户输入转换为DateTime
类型同时以特定格式返回的问题。我已经搜索了几个小时,到目前为止我尝试过的一切都没有奏效。
当我输入日期时,我希望它保持我输入的格式,以便Get-MessageTrace
可以读取它。
我正在寻找的是输入“2019 年 1 月 23 日”并将ParseExact
其作为“2019 年 1 月 23 日”返回。
我得到的是$NewDate1
“2019 年 1 月 23 日,星期三 12:01:00 AM”,我可能做的不对,或者做错了什么,但我可以使用一些帮助。
$UserEmail = Read-Host -Prompt 'Enter your WT email address'
$Date1 = Read-Host -Prompt 'Enter the first date (MM/DD/YYYY)'
$Date2 = (Read-Host -Prompt 'Enter the second date (MM/DD/YYYY)'
$NewDate1 = [datetime]::parseexact($Date1, 'm/d/yyyy', $null)
$NewDate2 = [datetime]::parseexact($Date2, 'm/d/yyyy', $null)
Get-MessageTrace -RecipientAddress 'UserEmail' -StartDate '$NewDate1'
-EndDate 'NewDate2'
我收到的错误:
无法处理参数“StartDate”的参数转换。无法将值“$NewDate1”转换为类型“System.DateTime”。错误:“字符串未被识别为有效的日期时间。” + CategoryInfo : InvalidData: (:) [Get-MessageTrace], ParameterBindin...mationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-MessageTrace + PSComputerName : outlook.office365.com
解决方案
首先,关于日期字符串格式,小写“m”代表分钟,大写“M”代表月。这就是为什么 '1/23/2019' 被解释为 2019 年 1 月 23 日星期三 12:01:00 AM(强调当天的第一分钟)。您可能想要的模式是“M/d/yyyy”。
其次,我不完全确定您了解日期解析。ParseExact
不采用字符串并将其作为具有特定字符串表示的日期“回击”。ParseExact
将格式化为日期的字符串转换为DateTime
对象。该DateTime
对象没有固有的格式或字符串表示形式(除非您认为ToString()
是规范的日期格式),它只是一个日期。如果以后需要该日期的字符串表示形式,则必须将其转换为字符串。
第三,您将一个值为 "$NewDate1" 的字符串传递给-StartDate
,因此异常说明:
无法将值“$NewDate1”转换为类型“System.DateTime”
删除 '$NewDate1' 周围的单引号以传递变量的值而不是变量的名称。
推荐阅读
- javascript - String to Number 在 JavaScript 中返回错误的结果
- nginx - Nginx 403 禁止位置和本地主机
- django - 如何让我的 django 服务器使用客户的打印机打印收据?
- c++ - 乘法/除法顺序(?)混淆
- php - Symfony 4.4(装饰)中的覆盖控制器 - “你请求了一个不存在的服务”
- python - 如何使用 Python 脚本启动 Windows?
- java - 如何将 javax.swing.ImageIcon 绘制到 JavaFX .fxml 呈现的用户界面中?
- neo4j - 删除重复关系时出现 Neo4j 内存不足错误
- python - 如何在 Jupyter Lab 中打开调试器按钮
- vba - 我的更新语句有问题——出现错误 3144