Забавный случай. Имеем скрипт, который обсчитывает все ленты в библиотеке, подконтрольной DPM 2012. Фрагмент скрипта выглядит вот так:

$RPs=Get-RecoveryPoint -Tape $Tape
$ExpDate = $RPs[0].recoverysourcelocations[0].expirydate

И вот этот кусок ведет себя на разных системах по-разному. На одной из рабочих станций - все ок. На сервере - все ок. На другой рабочей станции - все плохо, дает ошибку вида Unable to index into an object of type...
Сначала думали, что что-то не так с самим шеллом от DPM на проблемной машине. Переставили, результат нулевой.
Проверили догадку относительно прав на сам DPM и работу с ним. Отмели, потому что на сервере под той же учеткой, что и на проблемной рабочей станции, все ок.
Начал ковырять. Скрипт валится всегда на одних и тех же кассетах. А записей на этих кассетах - по одной штуке на каждую. Получается, что на выходе мы получаем обычную скалярную переменную, которую скрипт затем пытается представить как массив, и выдрать из него самый первый элемент с нулевым индексом. И получает отлуп. Проверяем:

PS C:\temp> $a=12
PS C:\temp> $a[0]
Не удается индексировать в объект типа System.Int32.
строка:1 знак:4
+ $a[ <<<< 0]
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex

Уже интереснее. Ковыряние сети привело к корню проблем: на такой фокус с обращением к обычной переменной, как к массиву, способен Powershell 3.0 и выше. А на проблемной станции - увы и ах, всего лишь вторая.
Что ж, учтем на будущее.