Powershell 替换 cron 计划中的第二项?

Powershell replacing 2nd item in cron schedule?

我确定我要离开这里了,可能有更简单的方法来做到这一点,但我必须更改一些 cron 文本计划并更改它们 运行..

cron 本身在一个文本文件中,所以我正在考虑使用 powershell 来获取内容、更新它并保存它..但是我不太擅长使用正则表达式等。 -我已经从互联网资源中拼凑了一些东西,但仍然有些缺失....

我可以抓取文件内容和写入等,只是第二个变量的更高级替换才是问题....

这是我的代码:

$testText = "cron(0 20 * * ? *)"
$pattern = '(\().+?(\))'
$new1 = [regex]::Matches($testText, $pattern).Value
"new1 $new1"
$new2 = $($new1 -replace '\s+', ' ').split()
"new2 $new2"
$new3 = $new2[1]-1 #Set back an hour
#$new3 = $new2[1] -replace $new2[1],"22" #Specify Hour
"new3 $new3"
$new4 = $testText -Replace($new2,$new3)
"new4 $new4"

这导致了这个输出——恼人的是第一位被敲掉了..

new1 (0 20 * * ? *)
new2 (0 20 * * ? *)
new3 19
new4 cron(19* * ? *) 

我使用空格将其拆分为括号后的第一项,括号可以是 1 位或 2 位数字,在第二组字符(小时)之后,这些也可以不同.. 即 cron(30 06 ? *周一至周五 *)

如有任何帮助,我们将不胜感激...-这是漫长的一天,我的大脑非常疲倦!!

$testText = "cron(0 20 * * ? *)"

$cron = $testText.split(' ').split('(').split(')')

'cron(' + 
$cron[1] + ' ' + 
(([datetime]::Today).AddHours($cron[2] -1).Hour) + ' ' + 
$cron[3] + ' ' + 
$cron[4] + ' ' + 
$cron[5] + ' ' + 
$cron[6] + 
')'

或者更简单一些

$testText = "cron(0 20 * * ? *)"

$cron = $testText.split(' ').split('(').split(')')
$cron[2] = ([datetime]::Today).AddHours($cron[2]-1).Hour
'cron(' + ($cron -join ' ') + ')'