根据数据来自哪个月,如何将powershell中的数据附加到不同的文件?

根据数据来自哪个月,如何将powershell中的数据附加到不同的文件?,powershell,date,append,office365api,Powershell,Date,Append,Office365api,我每天都在收集有关Office 365产品采用情况的数据。我不知道如何将基于文件大小写入新文件的当前逻辑转换为基于报告日期的逻辑 我最初的想法是使用if语句将数据按月拆分,并且有12个文件已经准备好附加(取决于数据的月份),但这似乎效率低下 $name=“O365SPSiteActivity.csv” $auth=获取AuthCode $accesstoken=$auth[1] ###省略了数据提取过程### 如果($report-ne$null) { ###创建新文件的新部分 #获取当前文件

我每天都在收集有关Office 365产品采用情况的数据。我不知道如何将基于文件大小写入新文件的当前逻辑转换为基于报告日期的逻辑

我最初的想法是使用if语句将数据按月拆分,并且有12个文件已经准备好附加(取决于数据的月份),但这似乎效率低下

$name=“O365SPSiteActivity.csv”
$auth=获取AuthCode
$accesstoken=$auth[1]
###省略了数据提取过程###
如果($report-ne$null)
{
###创建新文件的新部分
#获取当前文件
$source=“D:\O365Data\”+$name
$File=Get Item$source
如果((获取项目$file).Length/1MB)-ge 700)
{
$date=(获取日期-格式dd MM yyyy)
$RenamedFileName=“O365SPSiteActivity-$date.csv”
重命名项$file.FullName-新名称$RenamedFileName
$FileName=“D:\temp\”+$name
发送邮件消息–来自svc_sps10@kbslp.com-给谢尔比。cundiff@kbslp.com–主题“已创建新文件”-正文“新文件名:$RenamedFileName”-SmtpServer kbslp-com.mail.protection.outlook.com-端口25
}
其他的
{
$FileName=“D:\temp\”+$name
复制$File$FileName
}
#########################################################################
$Data=@()
$c=1
foreach($报告中的行)
{写入进度-活动$row.'User Principal Name'-PercentComplete(($c/$report.count)*100)-ID 4
$string=”“|选择“?”报告刷新日期、“用户主体名称”、“已删除”、“已删除日期”、“上次活动日期”、“查看或编辑的文件计数”,
“同步文件计数”、“内部共享文件计数”、“外部共享文件计数”、“访问页面计数”、“报告期”
$string.'???报告刷新日期'=获取日期($row.ï»报告刷新日期')-格式为“yyyy-MM-dd”
$string.“用户主体名称”=$row.“用户主体名称”
$string.'已删除'=$row.'已删除'
$string.“已删除日期”=$row.“已删除日期”
$string.“上次活动日期”=$row.“上次活动日期”
$string.“已查看或编辑的文件计数”=$row.“已查看或编辑的文件计数”
$string.“同步文件计数”=$row.“同步文件计数”
$string.“内部共享文件计数”=$row.“内部共享文件计数”
$string.“外部共享文件计数”=$row.“外部共享文件计数”
$string.“已访问页数”=$row.“已访问页数”
$string.“报告期”=$row.“报告期”
$Data+=$string
$c++
}
$Data |导出Csv-追加-路径$FileName-NoTypeInformation-强制
#$FolderUrl=$teamSitePath+“/”+$ListName
#$UploadFileInfo=新对象System.IO.FileInfo($FileName)
#上传SPOFile-WebUrl$teamSiteUrl-spCredentials$SPCreds-FolderUrl$FolderUrl-FileInfo$UploadFileInfo
$newFile=获取项目$FileName
复制$newFile$File.FullName
}
$report=$null
$Data=$null
理想情况下,我希望将此脚本更改为写入以下文件:


O365SPSiteActivity-2019-Oct.csv在10月份,然后O365SPSiteActivity-2019-Nov.csv在11月份,等等,这取决于数据的来源。

您是在查找当前日期还是电子表格中的日期

$date = (get-date -Format dd-MM-yyyy)
如果今天运行,将输出到O365SPSiteActivity-2019-Oct.csv

如果您希望根据数据中的日期将CSV分块,我可能会将导出CSV移动到foreach循环中,并将其修改为使用类似于上面的名称,而不是将其附加到$data数组中

$Data = "2019-May-31"
Get-Date -Format yyyy-MMM -Date ([datetime]::parseexact($Data, 'yyyy-MMM-dd', $null))
$FileName = "O365SPSiteActivity-$date.csv"
$Data | Export-Csv -Append -Path $FileName -NoTypeInformation -Force
这将把每一行写入相应的CSV文件中——对于每个月的数据,您将得到一个不同的CSV文件


请注意,parseexact中的“yyyy-MMM-dd”需要与输入日期的格式相匹配。例如,如果您根据$row对其进行排序,则日期为12/31/19的“Report Period”将改为“MM/dd/yy”(注意,我将分隔符从-改为/作为分隔符)。下面列出了每个字母的含义。

为什么要先写入临时文件,然后在完成时复制(可能存在的)文件?
如果我理解这个问题,您希望每月创建一份新的csv报告。
那么,为什么不这样做呢:

# create a filename for this month
$currentReport = 'O365SPSiteActivity-{0:yyyy-MMM}.csv' -f (Get-Date)

然后导出
-将数据附加到该文件中?如果该文件不存在,将创建该文件,否则新数据将附加到该文件中。

谢谢-我希望使用数据中的日期,因此我认为您建议的“for each”循环可能是最好的。现在我们直接创建一个临时文件,因为通常情况下cess是脚本失败的地方(如果它要失败的话)。我认为,通过结合您的命名方案和另一个for each循环的想法来确定数据来自哪个月,我可以得到我需要的。谢谢!