Назад | Перейти на главную страницу

Как использовать Powershell 2 Get-WmiObject для поиска экземпляра служб отчетов SQL Server (SQL2008) в Windows Server 2008 R2

Я пытаюсь использовать команду PowerShell 2 «Get-WmiObject», чтобы найти экземпляр службы отчетов с помощью этой команды

 get-wmiobject -class "MSReportServer_Instance" -namespace "root\Microsoft\SqlServer\ReportServer"

ОШИБКА Я ВОЗВРАЩАЮСЬ

Get-WmiObject : Invalid class
At line:1 char:14
+ get-wmiobject <<<<  -class "MSReportServer_Instance" -namespace "root\Microsoft\SqlServer"
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId :     GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

НОТЫ

ОТВЕТ (2009-06-22)

Приведенный ниже код находит экземпляр и помещает его в $ rs_instance

$ns = Get-WmiObject -class "__NAMESPACE" -namespace "root\Microsoft\SqlServer\ReportServer"
$rs_instance_name = "root\Microsoft\SqlServer\ReportServer\" + $ns.Name + "\v10"
$rs_instance = Get-WmiObject -class "MSReportServer_Instance" -namespace $rs_instance_name

Если то, что вы пытаетесь сделать, требует WMI, это может упускать суть, но SQL Server 2008 поставляется с управляемыми расширениями, что означает, что большинство задач автоматизации больше не нужно выполнять с помощью WMI.

Например, на машине с установленными клиентскими расширениями выберите БД с открыть в PowerShell щелкните правой кнопкой мыши команду контекстного меню или загрузить расширения в любом сеансе PowerShell (http://blogs.msdn.com/mwories/archive/2008/06/14/SQL2008_5F00_Powershell.aspx) и вы можете сделать следующее:

PS > cd SQLSERVER
PS > Set-Location \sql\MyServer\ReportServer

Теперь вы можете управлять объектами базы данных так же, как вы бы управляли файловой системой locla в PowerShell (например, попробуйте запустить dir. | Get-Member, чтобы увидеть некоторые свойства, с которыми можно взаимодействовать).

Во-первых, это действительный класс?

Попробуйте это: PS> get-wmiobject -list -namespace "root \ Microsoft \ SqlServer"

Попадает ли этот класс в список?

Ярлык: PS> get-wmiobject -list -namespace "root \ Microsoft \ SqlServer" | где {$ _. Name -eq "MSReportServer_Instance"}

У меня есть виртуальная машина под управлением Server 2008 с SQL 2008, и я могу попробовать это завтра.

Если вы не уверены в пространстве имен: PS> Get-WmiObject -Namespace "root" -Class "__NAMESPACE" | Имя списка форматов

(Это из: http://www.eggheadcafe.com/conversation.aspx?messageid=31024041&threadid=31024027)

С помощью WmiExplorer.ps1 script я вижу имя экземпляра в __NAMESPACE, и этот запрос возвращает имя моего экземпляра:

gwmi -class "__NAMESPACE" -namespace "root\Microsoft\SqlServer\ReportServer"

Чтобы перейти к MSReporterServer_Instance, вы должны указать имя экземпляра в этом примере, мое имя экземпляра - RS_SQL2K8:

gwmi -class "MSReportServer_Instance" -namespace "root\Microsoft\SqlServer\ReportServer\RS_SQL2K8\v10"