Да, это довольно запутанное сообщение об ошибке.Я думаю, что вы бы лучше поняли пример:
Get-ChildItem -Path C:\
Обратите внимание, что вокруг C:\
нет кавычек, потому что, во-первых, он преобразовывается в строку, а во-вторых, нет необходимости заключать впуть, который не содержит пробелов при передаче пути в качестве параметра некоторому вызываемому объекту.
Итак, давайте вернемся к вашей функции и слегка изменим ее:
function IsItFriday($dayOfWeek)
{
$dayOfWeek.GetType()
if ($dayOfWeek -eq [System.DayOfWeek]::Friday)
{
"yes"
}
else
{
"no"
}
}
IsItFriday [System.DayOkWeek]::Monday
... ивывод:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
no
Видите, что там произошло?PowerShell считает, что вы передаете строку вместо значения перечисления, поэтому вы получаете Cannot convert value "[System.DayOfWeek]::Monday"
, потому что это буквальная строка, которая передается внутрь.