如何收集 NTFS 文件属性并插入到 SQL Server 表中

Sir*_*lot 6 sql-server powershell sql-server-2012

我必须提供有关文件系统使用情况的报告。

我正在收集有关文件服务器使用情况的统计数据,具体到单个文件级别,以便我们可以查看谁在使用哪些文件/文件夹、他们使用了多少存储空间、他们拥有多少文件、创建时间和上次使用时间。

为此,我有 2 个 powershell 脚本。

第一个读取文件系统并捕获我想要的属性并将它们保存到文件中。

dir -rec G:\ | Select LastWriteTime, Directory, Name, Extension, Length, @{Name="Owner";Expression={get-acl $_.FullName| select Owner}} | export-csv FileInfo.csv
Run Code Online (Sandbox Code Playgroud)

第二个脚本读取 csv 文件并将数据插入表中。

一旦数据在 SQL 中,我可以解析文本并将其拆分为不同的列,然后生成各种报告并以不同的方式分析数据。我的方法有效,但很麻烦。

有没有更好的方法来收集 NTFS 信息并将其保存到 SQL Server 中?有哪些替代方案?情报局?

编辑:这一切可以组合在一起在一个过程中一起运行吗?

Dav*_*ave 5

SSIS 能够很好地处理 CSV 文件并将它们加载到 SQL Server 中。

您可以使用Flat File Source. 在此处输入图片说明

对话和设置是一个熟悉的windows“向导”之类的过程,而且大部分是自动化的……你需要注意的是它已经正确地猜测了你的文件的长度和数据类型。您可以在连接管理器中调整设置,也可以稍后使用 SSIS 任务更改数据类型。请注意,如果您说 10,000 行整数,然后开始获取字符,则平面文件源可能很容易为该列分配整数数据类型,然后在遇到字符时失败。因此,对于可能结构不佳的大文件,您必须更加注意这些设置。该Suggest Types...按钮允许您增加检查行的数量,但我发现即使这样仍然可以推荐错误的数据类型。

在此处输入图片说明

SSIS 是一个巨大的工具,您可以执行数据清理任务,甚至可以将数据从单个 CSV 拆分到不同的表中。如果您有不同的表,请使用Multicast或 之类的任务Conditional Split。您可能还会发现,Data Conversion并且Derived Column可以帮助您在数据在您的包裹中移动时有效地生成所需的数据。

不过,除了使用 SSIS 清理、拆分、修改和将数据加载到 SQL Server 中之外,我不会做更多的事情。SQL Server 已高度优化以生成聚合、排序等,而 SSIS 不太适合此类任务。诸如阻塞转换之Aggregate的任务本质上意味着它可以停止您的 SSIS 包并消耗大量内存。

作为示例,以下 SSIS 数据流执行以下任务:

  1. 读取 CSV 文件
  2. 创建派生列,这些列只是原始列的修剪版本
  3. 执行查找以查看记录是否已存在于目标中
  4. 如果未找到记录,则将其插入目的地

在此处输入图片说明