Я пытаюсь использовать команду 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
Приведенный ниже код находит экземпляр и помещает его в $ 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"