新手在这里......非常感谢大家的帮助和投入!
30,000'视图:创建可以/应该从网络中删除的“陈旧数据”报告。
步骤1.从包含FullName,Name&amp ;;的一组服务器中收集以“ST_”或“EDDS1”开头的文件夹列表。长度值。
$Path =
"\\server1.domain.com\b\sqlbackups",
"\\server1.domain.com\b\sqlbackups",
"\\server1.domain.com\b\sqlbackups";
$BackupFolders = @(gci $Path -filter "ST_*" | ?{ $_.PSIsContainer}) | Select FullName,Name,Length
$BackupFolders += @(gci $Path -filter "EDDS1*" | ?{ $_.PSIsContainer}) | Select-Object FullName Name, Length
$BackupFolders | Export-CSV C:\BackupFolders.csv
这会拉入一列长度,但该列中没有列出值...
步骤2.将此列表与SQL表进行比较。如果参考文档中存在值(步骤1)&在SQL中的特定列中,然后查看SQL中的“状态选项卡”。如果SQL表“status tab”表示“inactive”,则从Step1和Client输出FullName,Name,Length,从SQL表输出Project Name到csv。
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = "Server=sqlserver\sharename;Database=database;Integrated Security=True"
$sqlConnection.Open()
$sqlCommand = New-Object System.Data.SqlClient.SqlCommand
$sqlCommand.CommandText = "SELECT * FROM [Table].[dbo].[Matters] WHERE [Status] NOT LIKE 'Active%'"
$sqlCommand.Connection = $sqlConnection
$sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$sqlAdapter.SelectCommand = $sqlCommand
$Dataset = New-Object System.Data.DataSet
$sqlAdapter.Fill($Dataset)
$sqlConnection.Close()
$MatterStatus = @"
C:\MatterStatus.csv
"@
$Dataset.Tables[0] | Select Client,Project,MatterStatus | Export-Csv c:\MatterStatus.csv
问题1 - 如何在从Step1创建的csv中列出长度属性?
问题2 - 我在这里走在正确的轨道上吗?与Step1相同,最后一个值没有传播...我的csv中的MatterStatus是空白的。非常感谢任何建议/提示!
答案 0 :(得分:0)
根据http://technet.microsoft.com/en-us/library/ff730945.aspx,您可以使用gci | Measure-Object
或Scripting.FileSystemObject
COM对象来获取文件夹大小。
解决方案1(Pure Powershell):
Function Get-ItemSize($Path) {
(Get-ChildItem -Recurse -Path:$Path | Measure-Object -Property:Length -Sum | Select -ExpandProperty:Sum) / 1MB
}
解决方案2(COM对象):
$objFSO = New-Object -com Scripting.FileSystemObject
Function Get-ItemSize($Path) {
($objFSO.GetFolder($Path).Size) / 1MB
}
结合计算属性,您可以替换
... | Select FullName, Name, Length
使用:
... | Select FullName, Name, @{Name='Length'; @Expression= {"{0:N2} MB" -f (Get-ItemSize($_) })
它们提供相同的输出:
PS> Get-item 'D:\Temp' | Select FullName, Name, @{ Name='Length'; Expression = { "{0:N2} MB" -f (Get-ItemSize($_)) } }
FullName Name Length
-------- ---- ------
D:\Temp Temp 58.28 MB
我会猜测COM对象在技术上更快,但我把它作为读者的练习。