我今天需要PowerShell的帮助。我有一个VMDEV-APP11
配置为中央管理服务器(CMS)的SQL Server实例(在名为的服务器上),我已经在其中注册了所有开发/测试/生产SQL实例,并且我想使用PowerShell从所有实例中读取SQL Server错误日志我的服务器。我有一个查询,它检索我的所有SQL Server实例,但是当我将其输出通过管道传递到的调用时ReadErrorLog
,出现错误。
这是用于检索我在CMS上注册的SQL Server实例列表的代码(请注意,我排除了SQL Server 2000实例):
Set-Location D:\MSSQL11.MSSQLSERVER\CMS
# Define functions to query SQL Server and write data to a SQL table
. ./invoke-sqlcmd2.ps1
. ./write-datatable.ps1
Invoke-sqlcmd2 -ServerInstance "VMDEV-APP11" -Database dba -Query "select s.server_name from msdb.dbo.sysmanagement_shared_registered_servers s, msdb.dbo.sysmanagement_shared_server_groups g where s.server_group_id = g.server_group_id and g.name not like '2000%'"
server_name
-----------
INF-SRV14
VMDEV-APP15
NEX-SRV48
...
这就是我认为可以解决的问题,以及我实际上得到的错误:
Invoke-sqlcmd2 -ServerInstance "VMDEV-APP11" -Database dba -Query "select s.server_name from msdb.dbo.sysmanagement_shared_registered_servers s, msdb.dbo.sysmanagement_shared_server_groups g where s.server_group_id = g.server_group_id and g.name not like '2000%'" | foreach-object { $_.server_name.ReadErrorLog() }
错误:
方法调用失败,因为[System.String]不包含名为“ ReadErrorLog”的方法。
在D:\ MSSQL11.MSSQLSERVER \ CMS \ db_errorlog.ps1:38 char:284
+ ...到达对象{$ _。server_name.ReadErrorLog ()}
+ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
+ + CategoryInfo:InvalidOperation:(:) [],RuntimeException
+ FullyQualifiedErrorId:MethodNotFound
我怀疑我需要将查询返回的字符串转换为另一种类型的对象(也许是服务器名称?)才能ReadErrorLog()
开始工作,但是我不知道该怎么做。
有什么建议?
任何帮助将不胜感激。
肯
您试图ReadErrorLog()
在DataRow
列值(字符串)上调用该方法。
您需要做的是这样的:
Import-Module sqlps -DisableNameChecking
Invoke-sqlcmd2 -ServerInstance "VMDEV-APP11" -Database dba -Query "select s.server_name from msdb.dbo.sysmanagement_shared_registered_servers s, msdb.dbo.sysmanagement_shared_server_groups g where s.server_group_id = g.server_group_id and g.name not like '2000%'" | `
foreach-object {
$server = $_.server_name
$logs = (get-item SQLSERVER:\sql\$server\default).ReadErrorLog()
# $logs is a DataTable so you can iterate the rows however you wish
}
这假设您的所有服务器都是默认实例,否则您可能需要花更多精力来针对特定实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句