添加要选择的长度属性

时间:2013-07-15 18:11:18

标签: sql select powershell properties

新手在这里......非常感谢大家的帮助和投入!

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是空白的。

非常感谢任何建议/提示!

1 个答案:

答案 0 :(得分:0)

根据http://technet.microsoft.com/en-us/library/ff730945.aspx,您可以使用gci | Measure-ObjectScripting.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对象在技术上更快,但我把它作为读者的练习。