从远程计算机访问 SQL - WMI 命名空间

Posted

技术标签:

【中文标题】从远程计算机访问 SQL - WMI 命名空间【英文标题】:Access SQL - WMI Namespaces from Remote Machine 【发布时间】:2011-01-04 14:11:33 【问题描述】:

我正在玩 Powershell 和 SQL WMI 事件,我想知道我是否可以从管理笔记本远程执行这些操作:

我想查询“root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER”命名空间:

直接在 SQLServer 上:

get-wmiobject -list -namespace "root\Microsoft\SqlServer" >> 工作!

get-wmiobject -list -namespace "root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER" >> 工作!

在我的管理员机器上:

get-wmiobject -list -namespace "root\Microsoft\SqlServer" >> 工作!

get-wmiobject -list -namespace "root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER" >> 错误:无效的命名空间。

有什么诀窍可以让它运行吗?我需要额外安装吗? 我还在使用 SQL 2005。

谢谢!

【问题讨论】:

【参考方案1】:

使用计算机名名称参数。

get-wmiobject -computername Z002 -list -namespace "root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER"

还请记住,MSSQLSERVER 仅在服务器具有默认实例时可用。如果服务器使用命名实例,您需要指定实例名称而不是 MSSQLSERVER。

【讨论】:

非常感谢,使用 -computername 可以正常工作。我现在有一个权限问题,但那是另一个话题 ;-)【参考方案2】:

发布时间 - 2012 年 5 月 5 日:08:25:20

大家好,

我们开发了一个免费的 WMI CLR 程序集以在 SQL 中执行 WMI 查询。

例如这将返回挂载点和驱动器空间

DECLARE @XmlData Xml
--Obtain Windows Services 
select @XmlData=dbo.GetWMI('\\SQL2008WIN2008\root\cimv2', --Machine and WMI class
NULL, --UserName, leave NULL to use current
NULL, --Password, leave NULL to use current 
'select * from win32_volume' --WMI Class
)

SELECT 
tbl.A.value('(DeviceID)[1]','VARCHAR(100)') as DeviceID,
tbl.A.value('(Name)[1]','VARCHAR(200)') as Name,
tbl.A.value('(DriveType)[1]','int') as DriveType,
ISNULL(tbl.A.value('(DriveLetter)[1]','VARCHAR(10)'),'MountPoint') as DriveLetter,
tbl.A.value('(FreeSpace)[1]','bigint')/1024/1024 as FreeSpaceMbytes
FROM @XmlData.nodes('/WMI/Data') tbl(A)

看看http://micatio.com/sqlwmi.aspx

【讨论】:

以上是关于从远程计算机访问 SQL - WMI 命名空间的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 SWbemLocator 从远程计算机检索 WMI 时访问被拒绝 (80070005)

WMI 访问被拒绝问题

授予远程用户(非管理员)使用 WMI 和 C# 在命名空间 cimv2 中枚举 Win32_Service 服务的能力

PowerShell操作WMI概览

Win7系统中的wmi控件是啥?有啥用

C#中控制远程计算机的服务的方法