我在PowerShell中运行一个非常简单的TSQL代码。但输出仅显示受影响的行数,但不显示实际结果。代码如下:
function test([string] $Hostname )
{
try
{
$con="server=$Hostname;database=master;Integrated security=sspi"
$da=New-Object System.Data.SqlClient.SqlDataAdapter ("
select * from sysdatabases
",$con)
$dt=New-Object System.Data.DataTable
$da.fill($dt)|Out-Null
$da.fill($dt) | Format-table -AutoSize
}
catch [Exception]
{
## Do something with the exception
write-host "Could not run test function for "+$Hostname
}
}
foreach ($Hostname in Get-Content $ServerList)
{
test($Hostname)
}
请帮忙吗?
提前致谢
答案 0 :(得分:1)
我建议安装SQL客户端工具并使用SqlServerCmdletSnapin100而不是必须创建&通过System.Data.SqlClient管理所有内容。然后你的代码将成为:
function test([string] $Hostname )
{
try {
invoke-sqlcmd -server $hostname -database master -query "select * from sysdatabases" |ft -auto
} catch [Exception] {
## Do something with the exception
write-host "Could not run test function for "+$Hostname
}
}
SqlDAtaAdapter.Fill()会返回已填充的行数,这就是您获得所需内容的原因。如果你想以这种方式继续,你需要遍历已经填充的DataTable,正如paulsm4指出的那样。