Windows Server 2022证书脚本DateTime转换与Write-Host参数错误求助
解决方案
1. 修复DateTime格式转换错误
在it-IT区域环境下,直接解析"27/02/2028 12:50"会因区域默认解析逻辑冲突失败,必须显式指定格式完成转换:
- 使用
.NET ParseExact方法(兼容性最强):
$dateString = "27/02/2028 12:50" $format = "dd/MM/yyyy HH:mm" $certExpiryDate = [DateTime]::ParseExact($dateString, $format, [System.Globalization.CultureInfo]::GetCultureInfo("it-IT"))
- 或使用
Get-Date带参数的写法:
$certExpiryDate = Get-Date -Date $dateString -Format $format -Culture "it-IT"
2. 解决PositionalParameterNotFound参数错误
该错误源于参数传递位置不明确,PowerShell无法识别无参数名的位置参数,修正规则如下:
- 调用
Get-Date时必须明确指定参数名,禁止省略参数名传递值:
# 错误写法:Get-Date "27/02/2028" # 正确写法 Get-Date -Date "27/02/2028" -Format $format -Culture "it-IT" # 输出当前日期指定格式 Get-Date -Format $format
- 调用
Write-Host时,若需传递格式类参数(如-ForegroundColor)必须写明参数名,普通字符串直接拼接即可:
# 正确示例:输出带颜色的到期提醒 Write-Host "证书即将到期!剩余天数:" $daysRemaining -ForegroundColor Yellow
3. 适配it-IT区域的完整脚本片段
$formatdata = "dd/MM/yyyy HH:mm" $itCulture = [System.Globalization.CultureInfo]::GetCultureInfo("it-IT") # 模拟从证书获取的到期时间字符串 $expiryStr = "27/02/2028 12:50" try { # 安全解析日期 $expiryDate = [DateTime]::ParseExact($expiryStr, $formatdata, $itCulture) # 计算剩余天数 $daysLeft = ($expiryDate - (Get-Date)).Days Write-Host "证书到期时间:" $expiryDate.ToString($formatdata) Write-Host "距离到期还有 $daysLeft 天" } catch { Write-Host "日期解析失败:" $_ -ForegroundColor Red }
内容的提问来源于stack exchange,提问作者user22482857
相关产品推荐
相关产品推荐

