关于开发PowerShell脚本的指导

关于开发PowerShell脚本的指导,powershell,powershell-4.0,Powershell,Powershell 4.0,我无论如何都不是一个高级的脚本编写者,但我有一个工作需要完成的任务。任务是创建一个脚本,该脚本从目录中包含的每个报告文件中查看两条信息(以字节为单位的日期和容量)。这两条信息位于每个报表中的同一位置。然后,使用日期值,脚本可以报告每个月的最高容量利用率值。我正在考虑最终输出为HTML格式 获取日期值有两个选项。报告在第三行文本中包含格式为mm/dd/yyyy的日期,时间作为历元时间包含在文件名中 到目前为止,我已经编写了一个PowerShell脚本,用于解析报告正文中的日期和使用的容量。然后将此

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

获取日期值有两个选项。报告在第三行文本中包含格式为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

至于约会,真的由你决定。如果它们同样准确,那么这是一个意见的问题

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

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

$Array1 | Group-Object {([DateTime]$_.Date).ToString('MMMM')} | Select-Object Name,@{Name='MaxCap';Expression={ $_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum }}
现在这有点多了,让我们把它分解一下

Group对象
根据属性对数组进行分组。在本例中,我们希望按月份分组,但您没有month属性,因此我们传入的不是属性名称,而是脚本块以动态计算属性:

([DateTime]$_.Date).ToString('MMMM')
这会将
Date
属性(它是
[String]
)强制转换为
[DateTime]
对象。然后我们使用
.ToString('MMMM')
将其格式化为月份名称

结果将是一个组对象数组,
Name
属性是组的名称(在本例中是月名),而
group
属性将包含属于该组的所有原始对象

通过管道将其导入
选择对象
,我们需要
名称
(月份),然后我们将动态创建一个名为
MaxCap
的新属性:

$_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum
因此,我们取当前的
(该月所有对象的数组),然后扩展其
容量
属性,因此现在我们有了该组所有容量的数组

将其导入
Measure Object-Maximum
以获取最大值,然后
选择Object-ExpandProperty Maximum
(因为
Measure Object
返回具有
Maximum
属性的对象,我们只需要该值)


最终结果是一个具有当月和当月最大容量的对象。

Brilliant!非常感谢你!!这正是我所需要的,比我想象的要容易得多,但当然,这是你专业知识的结果。