Ваша переменная $test
ссылается не на String
, а на объект, состоящий из свойств Name
и State
возвращенного экземпляра FileInfo
.Нет Substring
метода на этом составленном объекте (ни на FileInfo
, в этом отношении), отсюда и ошибка.Чтобы получить имя файла, вам нужно получить доступ к свойству Name
, например так ...
$test.Name.Substring(0, 3)
В качестве альтернативы, если вы хотите только свойство Name
(неконечно, откуда взято State
) вы можете использовать параметр -ExpandProperty
, чтобы получить только это одно значение ...
$test = Get-ChildItem -Path $folderinput| select -ExpandProperty name -last 1
$test.Substring(0, 3)
Что касается того, почему один фрагмент работает, а другой - нетнеясно.Единственная разница между ними - это значение $folderoutput
, которое не используется;в следующей строке вы передаете $folderinput
на Get-ChildItem
.Вы уверены, что $datum
установлено и имеет свойство Month
?