Не удается получить свойства сервера Get-SQLAgent

#sql-server #powershell

#sql-server #powershell

Вопрос:

Эта команда всегда заканчивается исключением на каждом сервере, который я тестировал. Я не администратор, но в нем не говорится, что это проблема с разрешениями. Должно ли это работать? Как я могу заставить это работать?

 Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64)
>$PSVersionTable.PSVersion.ToString()
5.1.14409.1018
>(Get-Module -Name SqlServer).Version.ToString()
21.1.18068
 

Команда:

 (Get-SqlAgent -ServerInstance DBSERVER02).Properties

...
Name       : MaximumHistoryRows
Value      : -1
Type       : System.Int32
Writable   : True
Readable   : True
Expensive  : False
Dirty      : False
Retrieved  : True
IsNull     : False
Enabled    : False
Required   : False
Attributes : {}

Name       : MaximumJobHistoryRows
Value      : 0
Type       : System.Int32
Writable   : True
Readable   : True
Expensive  : False
Dirty      : False
Retrieved  : True
IsNull     : False
Enabled    : False
Required   : False
Attributes : {}
 

При перечислении через коллекцию произошла ошибка:
при выполнении инструкции Transact-SQL или пакета возникло исключение.. В строке: 1
символ: 1
(Get-SQLAgent -ServerInstance DBSERVER02).properties
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo: недопустимая операция: (Microsoft.SqlSe…pertyEnumerator:PropertyEnumerator) [],
исключение RuntimeException
FullyQualifiedErrorId: неверная нумерация

Обновить:

Похоже, что Properties и TargetServerGroups являются виновниками.

 >$a = Get-SqlAgent -ServerInstance DBSERVER02; $a | Get-Member -Type Properties |% { try { $name = $_.name; $a.$name | out-null } catch { $name   " doesn't work: "   $_ } }
Properties doesn't work: An error occurred while enumerating through a collection: An exception occurred while executing a Transact-SQL statement or batch..
TargetServerGroups doesn't work: The following exception occurred while trying to enumerate the collection: "An exception occurred while executing a Transact-SQL statement
or batch.".
 

Комментарии:

1. Вероятно, это не очень хорошая идея — перечисление всех свойств приводит к тому, что SMO запускает тонну команд на сервере, чтобы получить различные экзотические биты информации. Вероятно, вам следует ограничить код извлечением только тех данных, которые вас действительно интересуют. Чтобы увидеть, где происходит сбой, вам нужно подключить профилировщик и определить неудачные команды. FWIW, этот код worksforme ™ работает как с локальным экземпляром SQL Server 2017, так и с удаленным экземпляром SQL Server 2012 (с использованием 21.0.17240 ).

2. Чтобы узнать, какое свойство / свойства являются реальной проблемой, это должно сделать: $a = Get-SqlAgent -ServerInstance .; $a | Get-Member -Type Properties |% { try { $name = $_.name; $a.$name | out-null } catch { $name " doesn't work: " $_ } } (отказ от ответственности: не проверено, поскольку все они работают для меня).