Powershell - DataSet包含记录数

时间:2013-04-26 20:15:03

标签: sql-server powershell file-io

我看到一些奇怪的行为。在我的机器上,PowerShell返回记录集,我可以遍历记录没问题。在我的同事的机器上(谁有权访问我需要复制文件的文件共享)是获得记录计数而不是实际记录。我一定很遗憾。知道为什么我会看到这种不同的行为吗?

 $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
 $SqlConnection.ConnectionString = "Server = server; Database = db; Integrated Security = True"
 $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
 $SqlCmd.CommandText = "SELECT fileName from SomeTable"
 $SqlCmd.Connection = $SqlConnection
 $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
 $SqlAdapter.SelectCommand = $SqlCmd
 $DataSet = New-Object System.Data.DataSet
 $SqlAdapter.Fill($DataSet)
 $Table = new-object data.datatable
 $Table = $DataSet.tables[0]
 $SqlConnection.Close() 

 function Out-FileForce {
 PARAM($path)
 PROCESS
 {
     if(Test-Path $path)
     {
         Out-File -inputObject $_ -append -filepath $path
     }
     else
     {
         new-item -force -path $path -value $_ -type file
     }
 }
 }

foreach ($Row in $Table.Rows)
{
    $fullPath = $Row.FullFilePathWithName 
    $path = "\\server\folder\"
    $newPath = "C:\newFolder\"


    $newDestination = $fullPath -replace [regex]::Escape($path), $newPath

    #Write-Output $newDestination
    #Write-Output $fullPath

    # recurse should force the creation of the folder structure
    #Copy-Item $fullPath $newDestination -recurse
    Out-FileForce $newDestination
    Copy-Item $fullPath $newDestination -force
    Write-Output $newDestination " done"

}

2 个答案:

答案 0 :(得分:1)

这一行: -

$ SqlAdapter.Fill($数据集)

如果您愿意,可以返回行计数,以便稍后将其分配给某些内容: -

$ rowCount = $ SqlAdapter.Fill($ DataSet)

或者如果您不需要它: -

[空隙] $ SqlAdapter.Fill($数据集)

以上两者都可以避免跳过1

希望这有帮助

答案 1 :(得分:0)

想出一个解决方案,我仍然不确定为什么。

$ DataSetTableRows导致了问题

修复我发布的原始脚本。

将此添加到顶部:

$ Table = new-object data.datatable $ Table = $ DataSet.tables [0]

然后在我的循环中我使用$ Table.Rows