我試圖通過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