2016-09-30 2 views
2

Я не могу понять, как правильно применить PSSession для использования в качестве параметра в функции.Почему я не могу использовать функции [PSSession] для объявления функций?

Должен ли я загрузить сборку или что-то еще? Я использую Powershell v4.

Мне нравится указывать параметры своих функций, чтобы убедиться в правильном использовании. То, что я пытаюсь это:

function Some-Remote-Task([PSSession] $Session, [String]$Target) { 
    # Do stuff... 
} 

Но я получаю эту ошибку при литье моего параметра:

Unable to find type [PSSession]. Make sure that the assembly that contains this type is loaded. 

Кроме того, с помощью $mySession.GetType() на действительную сессии дает следующее:

IsPublic IsSerial Name          BaseType                               
-------- -------- ----          --------                               
True  False PSSession        System.Object  

Таким образом, похоже, что это должно быть правильное название типа ...

Вся помощь является ценной iated.

ответ

0

EDIT:

теперь я могу использовать [PSSession] правильно.

Объединив информацию из ссылки в комментарии biantist по: Type Accelerator

С другой ответ здесь: Simplify Your Script...

Я добавил тип ускорителя правильно:

PS c:\> [PowerShell].Assembly.GetType("System.Management.Automation.TypeAccelerators")::add(“PSSession”,”System.Management.Automation.Runspaces.PSSession”) 

PS c:\> [PSSession] 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  False PSSession        System.Object 

БЫЛА:

В конце я использовал псевдоним. Опубликовано для других, которые также предпочитают чистый вид.

New-Alias PSSession System.Management.Automation.Runspaces.PSSession 

-ErrorAction SilentlyContinue Полезно добавить к нему во время тестирования, если вы держите перезапустив одни и те же сегменты кода.

+1

Лично я бы обескураживал это. Я даже не уверен, как это работает в вашем коде, поскольку псевдонимы для команд/функций/командлетов. То, что вы ищете, это [Тип ускорителя] (https://blogs.technet.microsoft.com/heyscriptingguy/2013/07/09/simplify-your-script-by-creating-powershell-type-accelerators/) , – briantist

+0

Выше комментарий был до редактирования. Теперь теперь применяется ускоритель типа. – Grallen

6

Попробуйте это:

function Some-Remote-Task([System.Management.Automation.Runspaces.PSSession]$Session, [String]$Target) { 
    # Do stuff... 
} 
+0

Это работает. Я еще не принимаю, потому что не знаю, насколько это лучший ответ. – Grallen

+3

@Grallen 1) вы всегда можете принять и изменить это позже. 2) Это правильный ответ. Нет никакого контекста, что я знаю, где вы можете использовать '[PSSession]' как таковой. Проверьте '$ mySession.GetType(). FullName'. Это конкатенация '$ mySession.GetType(). Пространство имен и' $ mySession.GetType(). Name'. – briantist