我正在尝试在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组件导致该错误未被安装。
请您查看代码并告诉我
答案 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 /salvagerepository
和Winmgmt /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