在SQL Server执行get-wmiobject

时间:2016-06-30 07:49:53

标签: sql sql-server powershell

我正在尝试在SQL Server中执行以下PowerShell查询

xp_cmdshell "get-WmiObject Win32_LogicalDisk -AV-RISCVMSQL114 | Format-Table -Property DeviceID,FreeSpace,Size"

执行此操作后,我收到错误:

  

'获得-WmiObject可以'不被视为内部或外部命令,   可操作程序或批处理文件。

我想在所有SQL Server中执行此命令。它已在SQL Server 2008上执行,但在SQL Server 2012上,由于版本或某些PowerShell组件导致该错误未被安装。

请您查看代码并告诉我

1 个答案:

答案 0 :(得分:1)

尝试:

xp_cmdshell 'PowerShell.exe -noprofile -command "get-WmiObject Win32_LogicalDisk -AV-RISCVMSQL114 | Format-Table -Property DeviceID,FreeSpace,Size"'

如果此操作无法登录到服务器,请使用管理员权限打开PowerShell。键入Get-ExecutionPolicy并检查“执行策略”是否设置为“不受限制”。如果不是,请输入以下内容,然后输入“' A' (全是):

Set-ExecutionPolicy Unrestricted

如果仍然无效,请尝试升级到至少PowerShell V3。但如果无法做到这一点,您可以尝试使用以下命令修复损坏的PowerShell V2 WMI存储库。

winmgmt /verifyrepository

如果发现存储库不一致,请运行Winmgmt /salvagerepositoryWinmgmt /resetrepository并在每个存储库后验证。如果仍然不一致,请尝试以下步骤:

  • 转到Task Manager>>服务>>开放服务>> Windows Management Instrumentation服务,并将启动类型更改为Manual
  • 停止WMI服务:

    net stop winmgmt

  • 将存储库文件夹(C:\Windows\System32\wbem\Repository)重命名为其他人' Repository_OLD'。

  • 启动WMI服务:

    net start winmgmt

  • 将服务设置回自动启动。

失败重新注册所有dlls并使用以下.mofs脚本重新编译Wbem目录中的.bat,然后重新启动。

@echo off
sc config winmgmt start= disabled
net stop winmgmt /y
%systemdrive%
cd %windir%\system32\wbem
for /f %%s in (‘dir /b *.dll’) do regsvr32 /s %%s
wmiprvse /regserver 
winmgmt /regserver 
sc config winmgmt start= auto
net start winmgmt
for /f %%s in (‘dir /s /b *.mof *.mfl’) do mofcomp %%s