我正在编写powershell脚本来读取数据库服务器列表上的SQL实例名称。
到目前为止,我已经加倍了。当只有一个实例名称但是从注册表返回多个实例时,我的脚本正在按预期工作,我的变量是将孔数组作为单个值插入表中。
我的结果如下所示,我不想要
SVC_Server SVC_Instnace
Server1 MSSQLSERVER
Server2 MSSQLSERVER INST1
Server3 MSSQLSERVER INST1 INST2
我期待这样的结果
SVC_Server SVC_Instnace
Server1 MSSQLSERVER
Server1 INST1
Server2 MSSQLSERVER
Server2 INST1
Server3 MSSQLSERVER
Server3 INST1
Server3 INST2
我尝试了以下方法来处理,但没有运气。
我在powershell的学习阶段......我很感激你的帮助。
$Tsql = "SELECT svr_name FROM server"
$ServerList = Invoke-Sqlcmd -Query $Tsql -ServerInstance $sql_inst -Database $sql_db
$Servers = $ServerList.Svr_name
# ECHO $Servers
foreach($Server in $Servers)
{
try
{
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('Localmachine', $Server)
$regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server" )
If ($regKey.GetSubKeyNames() -contains 'Instance Names' -or $regKey.GetValueNames() -contains 'InstalledInstances' )
{
$instances = $regKey.GetValue('InstalledInstances')
#ECHO $instances
}
ElseIf ($regKey.GetValueNames() -contains 'Instance Names')
{
$regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" )
$instances = @($regkey.GetValueNames())
}
foreach($Srv in $Server)
{
if ($instances.count -gt 1) {
for($i=0; $i -ge $instances.Length ;$i++)
{
Invoke-SQLCMD -Query "INSERT INTO [dbo].[SVC_Instance] ([SVC_Server],[SVC_Instance]) VALUES ( ('$Server'),('$instances[i]')) " -Database $sql_db -ServerInstance $sql_inst
ECHO $Server
ECHO $instances
}
}
else
{
Invoke-SQLCMD -Query "INSERT INTO [dbo].[SVC_Instance] ([SVC_Server],[SVC_Instance]) VALUES ( ('$Server'),('$instances')) " -Database $sql_db -ServerInstance $sql_inst }
ECHO 'Else is executed'
}
#ECHO $Server
#ECHO $instances
}
Catch
{
"Something wrong with : $Server " | Out-file 'C:\ServerPatching\Failed_Servers.txt' -Append
#ECHO $Server
}
# ECHO $instances
}
}
答案 0 :(得分:0)
foreach($ Srv in $ Server) {
foreach($inst in $instances)
{
Invoke-SQLCMD -Query "INSERT INTO [dbo].[SVC_Instance] ([SVC_Server],[SVC_Instance]) VALUES ( ('$Server'),('$inst')) " -Database $sql_db -ServerInstance $sql_inst
}