开发 PowerShell 脚本的指导

Guidance with developing PowerShell script

无论如何我都不是高级脚本编写者,但我有一项工作需要完成。任务是创建一个脚本,该脚本从包含在目录中的每个报告文件中查看两条信息(日期和使用的容量(以字节为单位))。这两条信息位于每份报告中的相同位置。然后,使用日期值,脚本可以报告每个月的最高容量利用率值。我正在考虑将最终输出设为 HTML 格式。

获取日期值有两种方式。该报告在第 3 行文本中包含格式为 mm/dd/yyyy 的日期,时间作为大纪元时间包含在文件名中。

到目前为止,我已经编写了一个 PowerShell 脚本,用于分析报告正文中的日期和使用的容量。然后将此信息添加到数组中。

我正在寻找有关使用哪个日期值(文件名中的纪元时间或报告正文中的日期)以及最好使用哪种方法来查看每个月的数据和报告的指南每月产能利用率最高。

到目前为止,这是我的脚本:

#Construct an array to use for data export
$fileDirectory = "c:\Temp"
$Array1 = @()

foreach ($file in Get-ChildItem $fileDirectory)
{
    #Obtain path to each file in directory
    $filePath = $fileDirectory + "\" + $file
    #Get content of each file during the loop
    $data = Get-Content $filePath
    #Create object to enter data into Array1
    $myobj = "" | Select "Date","Capacity"
    $dateStr = ($data[2].Split(" "))[3]
    [long]$capacityStr = ($data[19].Split(","))[2]
    [single]$CapacityConv = $capacityStr
    $capacityConv = ($capacityConv /= 1099511627776)

    #Fill the object myobj
    $myobj.date = $dateStr
    $myobj.capacity = $capacityConv

    #Add the object to Array1
    $Array1 += $myobj

    #Wipe the object
    $myobj = $null
}
#After the loop, export the array to CSV file
$Array1 | export-csv "c:\Scripts\test-output.csv"
$Array1
pause

具体日期,完全由您决定。如果它们同样准确,那就是见仁见智了。

对于容量,我假设这些是给定日期格式的每日报告,并且您想要给定月份的最大容量。

由于您正在为每个报告创建一个包含 DateCapacity 属性 的对象,使用所有这些值的返回数组,您应该能够获得您需要的信息如下:

$Array1 | Group-Object {([DateTime]$_.Date).ToString('MMMM')} | Select-Object Name,@{Name='MaxCap';Expression={ $_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum }}

这么多,让我们分解一下。

Group-Object 根据 属性 对数组进行分组。在这种情况下,我们想按月分组,但您没有月份 属性,因此我们传入脚本块来计算 属性 而不是 属性 名称] 即时:

([DateTime]$_.Date).ToString('MMMM')

这会将您的 Date 属性(即 [String])转换为 [DateTime] 对象。然后我们用.ToString('MMMM')格式化成月份名

结果将是一组组对象,其中 Name 属性 是组的名称(在本例中是月份名称),Group 属性 将包含属于该组的所有原始对象。

将其通过管道传输到 Select-Object,我们需要 Name(月份),然后我们正在动态创建一个名为 MaxCap 的新 属性:

$_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum

所以我们取当前的Group(那个月所有对象的数组),然后扩展它的Capacity 属性所以现在我们有一个包含所有容量的数组对于组。

将其输入 Measure-Object -Maximum 以获得最大值,然后 Select-Object -ExpandProperty Maximum (因为 Measure-Object returns 一个具有 Maximum [=54= 的对象] 而我们只想要值)。

最终结果是一个包含月份和该月份最大容量的对象。