gpt4 book ai didi

powershell - PowerShell:如果找不到字符串,则发生不必要的错误

转载 作者:行者123 更新时间:2023-12-02 23:38:09 25 4
gpt4 key购买 nike

如果证书的有效期限在当前日期的30天内,我的脚本有问题,该脚本应该打印输出。但是我发现,如果现在找到了过期纪元字符串,则会收到一条错误消息“Cannot index into array”,它使我的输出混乱。

请让我知道如何仅在包含到期时间字符串的文件上运行此脚本

$c = Get-Date (Get-Date).ToUniversalTime() -UFormat %s
$epochroundedtimes = [math]::Round($c)
$epochtimes = $epochroundedtimes + 2592000
Get-ChildItem -Path "C:\scripts\PALO" -File -Recurse |
ForEach-Object { $epochtimes } {
$certexp =
[double] ($_ | Select-String -pattern "expiry-epoch (\d+)$").Matches.Groups[1].Value
if ($certexp -le $epochtimes) {
$_.FullName
}
}

最佳答案

试试这个:

$c = Get-Date (Get-Date).ToUniversalTime() -UFormat %s
$epochroundedtimes=[math]::Round($c)
$epochtimes=$epochroundedtimes + 2592000

Get-ChildItem -Path "C:\scripts\PALO" -File -Recurse |
ForEach-Object {
$epochMatch = $_ | Select-String -pattern "expiry-epoch (\d+)$"

if($epochMatch)
{
$certexp = ([double]($epochMatch.Matches.Groups[1].Value))

if($certexp -le $epochtimes)
{
$_.FullName
}
}
}

编辑:根据评论添加简短说明

该错误是由原始代码示例中的此行生成的:
$certexp = 
[double] ($_ | Select-String -pattern "expiry-epoch (\d+)$").Matches.Groups[1].Value

这是有问题的,因为如果目标文件中不包含预期的字符串,则 Select-String不会产生任何输出,因此就没有查询的 MatchesGroup属性。将该行拆分为多个步骤,可以在尝试访问其属性之前检查是否有对象可使用。也就是说,我们尝试字符串匹配:
$epochMatch = $_ | Select-String -pattern "expiry-epoch (\d+)$"

然后检查 $epochMatch是一个实际对象:
if($epochMatch)

如果是这样,我们然后检索匹配的值:
$certexp = ([double]($epochMatch.Matches.Groups[1].Value))

关于powershell - PowerShell:如果找不到字符串,则发生不必要的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49804285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com