首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PowerShell脚本开发指南

PowerShell脚本开发指南
EN

Stack Overflow用户
提问于 2015-10-09 23:00:32
回答 1查看 58关注 0票数 0

我不是一个先进的文学家,但我有一个任务,我需要完成的工作。任务是创建一个脚本,它从包含在目录中的每个报表文件中查看两条信息(日期和字节中使用的容量)。这两项资料在每一份报告中都位于同一地点。然后,使用日期值,脚本可以报告每个月容量利用率最高的值。我正在考虑最后的输出是HTML格式的。

获取日期值有两个选项。报告在文本的第3行中包含mm/dd/yyyy格式的日期,时间作为Epoch时间包含在文件名中。

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

我正在寻找更好地使用哪个日期值的指导(文件名中的Epoch时间或报告正文中的日期),以及用于查看每个月的数据并报告每月最高容量利用率的最佳方法。

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

代码语言:javascript
运行
复制
#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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 23:37:16

日期的事,真的要看你了。如果它们同样准确,那就取决于人们的看法。

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

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

代码语言:javascript
运行
复制
$Array1 | Group-Object {([DateTime]$_.Date).ToString('MMMM')} | Select-Object Name,@{Name='MaxCap';Expression={ $_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum }}

现在这是很多,所以让我们把它分解。

Group-Object基于属性对数组进行分组。在本例中,我们希望按月分组,但您没有month属性,因此,我们要传入一个脚本块来动态计算属性,而不是属性名称:

代码语言:javascript
运行
复制
([DateTime]$_.Date).ToString('MMMM')

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

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

将其导入Select-Object,我们需要Name (月份),然后动态创建一个名为MaxCap的新属性

代码语言:javascript
运行
复制
$_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum

因此,我们接受当前的Group (那个月所有对象的数组),然后展开它的Capacity属性,所以现在我们有了这个组的所有容量的数组。

将其导入Measure-Object -Maximum以获得最大值,然后是Select-Object -ExpandProperty Maximum (因为Measure-Object返回一个带有Maximum属性的对象,我们只需要这个值)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33048333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档