这是一个更大的脚本的一部分,它在SQL Server机器上找到 DatabaseFiles (多个实例)。
以下应该只返回3个实例的所有文件。
服务器名为V3000801
,其中有一个默认实例+2个命名实例。如果默认或命名不起作用我也可以,我将单独解决这个问题(最有可能创建一个标志,并使用另一个连接字符串默认)。
$SqlCmd.ExecuteNonQuery()
只返回-1,这对我没有任何意义。
感谢您的帮助
for($i=0;$i -lt $instances.Length;$i++){
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$Server= "V3000801\"+$instances[$i];
$SqlConnection.ConnectionString = "Server = $server ; Database = master; Integrated Security = sspi;trusted_connection=true";
$sqlQuery="SELECT physical_name FROM sys.master_files;";
Write-Host $SqlConnection.ConnectionString;
$SqlConnection.Open();
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCmd.CommandText = $sqlQuery;
$SqlCmd.Connection = $SqlConnection;
$SqlCmd.ExecuteNonQuery();
$SqlConnection.Close();
}
答案 0 :(得分:0)
使用ExecuteReader
功能进行选择。 ExecuteNonQuery
用于不返回任何结果(例如插入,更新和删除)的操作。
Here是.NET中的一个示例,但它在PowerShell中应该类似。
编辑:
此代码应该有效。我在自己的环境中尝试了它(使用不同的服务器名称)。
for($i=0;$i -lt $instances.Length;$i++){
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$Server= "V3000801\"+$instances[$i];
$SqlConnection.ConnectionString = "Server = $server ; Database = master; Integrated Security = sspi;trusted_connection=true";
$sqlQuery="SELECT physical_name FROM sys.master_files;";
Write-Host $SqlConnection.ConnectionString;
$SqlConnection.Open();
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCmd.CommandText = $sqlQuery;
$SqlCmd.Connection = $SqlConnection;
$reader = $SqlCmd.ExecuteReader();
while ($reader.Read())
{
"pfad=" $reader["physical_name"];
};
$SqlConnection.Close();
}
答案 1 :(得分:0)
@jody发布的链接包含一些很好的信息 尝试:
$dr= $SqlCmd.ExecuteReader()
while ($dr.Read())
{
$dr.GetValue(0)
}
$sqlconnection.Close()