我正在尝试编写一个脚本,通过浏览由新文件分隔的服务器名称的文本文件来确定服务器是否正在运行MSSQLSERVER
或MSSQL$*
(某些SQL Server实例)线。该代码适用于第一台服务器并输出正确的版本和引擎版本,但对于所有其他服务器,它只会告诉我它们是否运行SQL Server,而不是输出版本和引擎版本。我做错了什么?
提前感谢您提供的任何帮助!
Clear-Host
$Name1 = "MSSQLSERVER"
$Name2 = "MSSQL$*"
$computers = Get-Content "E:\computers.txt"
$saveAs = 'E:\SQL_Report.txt'
foreach ($computer in $computers) {
try{
$Service1 = Invoke-Command -ComputerName $computer {Get-Service MSSQLSERVER}
$Service2 = Invoke-Command -ComputerName $computer {Get-Service MSSQL$*}
if($Service1 -Match $Name1 -Or $Service2 -Match $Name2){
"$computer Running MSSQL"
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" "$computer"
$srv.Version
$srv.EngineEdition
}
else{
"$computer Not running MSSQL"
}
}
catch{
"$computer, Not Accessable, $_"
continue
}
}
以下是当前输出的示例:
Database_name1运行SQL Server
主要次要构建修订
10 50 6220 -1
EnterpriseOrDeveloper
Database_name2未运行SQL Server
找不到任何具有服务名称的服务' MSSQLSERVER'。
+ CategoryInfo:ObjectNotFound:(MSSQLSERVER:String)[Get-Service],ServiceCommandException
+ FullyQualifiedErrorId:NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
Database_name3运行SQL Server 找不到任何具有服务名称的服务' MSSQLSERVER'。 + CategoryInfo:ObjectNotFound:(MSSQLSERVER:String)[Get-Service],ServiceCommandException + FullyQualifiedErrorId:NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand