我看到一些奇怪的行为。在我的机器上,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"
}
答案 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