我试图通过Powershell脚本使用SMO收集有关远程计算机上的SQL Server服务的信息。我的代码在服务器上存在多个实例时似乎可以正常工作,因为它们是相同的SQL Server版本。枚举服务器上存在两个不同版本的SQL Server的SQL Server服务
我的问题是,当安装了两个不同版本的SQL Server的实例时,我创建的ManagedComputer对象中只存在一组服务。
具体来说,我有一个名为'SQLEXPRESS'的命名实例,SQL Server 2008 R2的EXPRESS安装。 SQL Server的默认实例是2012年在下面的代码给出了下面的输出,这是缺少2012年的服务:
PS C:\od\scripts\Powershell\ServerInventory> [void][reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
PS C:\od\scripts\Powershell\ServerInventory> $s = New-Object -typeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer myComputer
PS C:\od\scripts\Powershell\ServerInventory> $s.services.name
MSSQL$SQLEXPRESS
SQLAgent$SQLEXPRESS
SQLBrowser
PS C:\od\scripts\Powershell\ServerInventory> $s
ConnectionSettings : Microsoft.SqlServer.Management.Smo.Wmi.WmiConnectionInfo
Services : {MSSQL$SQLEXPRESS, SQLAgent$SQLEXPRESS, SQLBrowser}
ClientProtocols : {}
ServerInstances : {MSSQLSERVER, SQLEXPRESS}
ServerAliases : {}
Urn : ManagedComputer[@Name='myComputer']
Name : myComputer
Properties : {}
UserData :
State : Existing
对于ManagedComputer对象,我没有看到通过它比其他任何东西的能力我正在运行的计算机名称,没有特定于SQL Server实例的计算机名称。
我正在寻找一种方法来收集有关这两个实例的服务的信息。
我不能重现这一点。什么是'myComputer'?这不是有效的名称或变量。 myComputer是你机器的实际名称吗?也许你正在连接到错误的机器。用'.'代替'myComputer'试试 –
是的,'myComputer'是计算机名称,我将它从实际的计算机名称中更改。我尝试远程连接并在机器本身无济于事,使用名称和'.' – SQLEnforcer
@Panagiotis你有一台服务器与两个不同版本的SQL Server运行? – SQLEnforcer