gpt4 book ai didi

arrays - PowerShell - 每小时创建一个文件吗?

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

我正在尝试创建一个 PowerShell 脚本,该脚本将每天早上运行一次(通过任务计划程序)并提醒某人(通过直接发送(我知道如何执行此操作,稍后将实现所述功能))如果在此期间未创建文件前一天的每个小时,以便不再需要手动或在出现问题时执行此操作。文件名,如 $FilePattern 中所示,都包含它们的创建日期和时间。显然,我的 Foreach 循环中的逻辑是有缺陷的,因为 $Time 将始终以 $Hours 为单位,但我一直在挠头,无法弄清楚我应该如何去做。我以为我可以比较两个数组,但现在我不太确定。我还遇到了看起来很有希望的比较对象,但我无法完全掌握它。我为困惑道歉。我目前的代码如下。

[CmdletBinding()]

param(

[Parameter(Mandatory=$false)]
[ValidateScript({ Test-Path $_ -PathType Container })]
[string]
$Path = "C:\Users\<username>\Desktop\Archive",
$Year = [DateTime]::Today.AddDays(-1).Year,
$Month = [DateTime]::Today.AddDays(-1).Month,
$Day = ([DateTime]::Today.AddDays(-1).Day),
$strMonth = ([String]$Month).PadLeft(2,'0'),
$strDay = ([String]$Day).PadLeft(2,'0'),
$Date = "$Year" + "$strMonth" + "$strDay",
$FilePattern = @("850_" + $Date + "*.txt"),
$Files = (Get-ChildItem -Path $Path -Include $FilePattern -Recurse |
Select-Object -ExpandProperty CreationTime | Get-Date -f "yyyyMMdd"),
$Time = (Get-ChildItem -Path $Path -Include $FilePattern -Recurse |
Select-Object -ExpandProperty CreationTime | Get-Date -f "hh"),
$Hours = @(0..23)

)

Foreach ($File in $Files) {

#if (-Not (Test-Path "$Path\$FilePattern")) {
# Write-Host "Warning: The file path doesn't exist!"
#} else {
# Write-Host "The file path exists..."
#}

if ($Hours -notin $Time) {
Write-Host "There's no file present for $Time o'clock for $Date."
} else {
Write-Host "There's at least one file per hour for $Date."
}

}

最佳答案

这是一个较短且可能更具可读性的实现:

$Path = "C:\Users\<username>\Desktop\Archive\*"
$Date = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$Hours = Get-ChildItem -Path $Path -Include "850_$($Date)*.txt" | ForEach-Object {(Get-Date $_.CreationTime).Hour} | Sort-Object | Get-Unique
for ($Hour = 0; $Hour -lt 24; $Hour++) {
if ($Hour -in $Hours) {
Write-Host "There's at least one file for $Hour o'clock for $Date." -ForegroundColor Green
} else {
Write-Host "There's no file present for $Hour o'clock for $Date." -ForegroundColor Red
}
}

那么我改变了什么:
  • 我删除了 params块,因为我认为您只是用它来初始化变量,但它旨在定义要传递给函数的参数。看起来您不想将任何内容传递给该脚本。如果我错了纠正我。
  • 我在您的路径中添加了一个星号 ( * ) 以生成 -Include参数工作(见 docs)。我想你加了 -Recurse使其工作。使用 -Recurse仅当您的日志位于子目录中时。
  • 我添加了一种更具可读性和更易于理解的方法来创建所需的时间戳。
  • 我提取了小时数,您正在寻找数字,因此您可以将它们与数字进行比较,而不必创建一个由两位数字组成的字符串化小时数数组。
  • 如果缺少任何文件,我在输出中添加了颜色以获得更快的概览。
  • 关于arrays - PowerShell - 每小时创建一个文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61510029/

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