2013-04-26 99 views
1

我看到一些奇怪的行爲。在我的機器上,PowerShell返回記錄集,我可以遍歷記錄沒有問題。在我的同事機器(誰有權訪問文件共享,我需要從中複製文件)正在獲取記錄計數,而不是實際記錄。我必須想念一件容易的事。任何想法爲什麼我看到這種不同的行爲?Powershell - DataSet包含記錄數

$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" 

} 

回答

0

想通了一個修復,我仍然不知道爲什麼。

$ DataSetTableRows是造成問題

固定在原來的劇本我張貼。

將此添加到頂部:

$表=新物體data.datatable $表= $ DataSet.tables [0]

然後在我的循環我用$ Table.Rows

+1

您對$ SqlAdapter.Fill調用($數據集)將返回的行數。給調用添加out-null:$ SqlAdapter.Fill($ DataSet)|出空 – 2013-04-27 13:50:17

1

這條線: -

$ SqlAdapter.Fill($數據集)

返回的行數,如果你願意,對於以後將其分配到的東西: -

$ rowCount時= $ SqlAdapter.Fill($數據集)

,或者如果你不需要它: -

[空] $ SqlAdapter.Fill($數據集)

上面的兩個會避免需要跳過1

希望這有助於