Почему я не могу привести к [PSSession], объявляющему параметры функции?

#powershell #powershell-4.0 #type-accelerators

#powershell #powershell-4.0 #ускорители типов

Вопрос:

Я не могу понять, как правильно использовать 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    
  

Похоже, что это должно быть правильное имя типа…

Любая помощь приветствуется.

Ответ №1:

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

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

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

1. Это работает. Я пока не принимаю, потому что не знаю, является ли это наилучшим возможным ответом.

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

Ответ №2:

Редактировать:

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

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

С другим ответом здесь: упростите свой сценарий …

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

 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. Лично я бы не рекомендовал это. Я даже не совсем уверен, как это работает в вашем коде, поскольку псевдонимы предназначены для команд / функций / командлетов. То, что вы ищете, — это ускоритель типов .

2. Комментарий выше был до редактирования. Теперь реализован ускоритель ввода.