передача пользовательского объекта в другой скрипт ps1 - PullRequest
0 голосов
/ 31 октября 2018

Я хотел бы передать изготовленный на заказ объект из сценария в другой.

Начиная с subscript.ps1 есть входные параметры:

param(
  [string]$someString,
  [object]$custClassData
 )

В main.ps1 я пытаюсь вызвать subscript.ps1 после введения пользовательского объекта:

class custClass{
   [string]$string1
   [string]$string2
   [string]$string3
}

$customizedObject = [custClass]::new()
$customizedObject.string1 = "smthng1"
$customizedObject.string2 = "smthng2"
$customizedObject.string3 = "smthng3"
$scriptPath = ".\subscript.ps1"
$smString = "somethingsomething"
powershell.exe -file $scriptPath -someString $smString -custClassData $customizedObject

При таком вызове, если я проверяю нижний индекс $ custClassData.GetType, он возвращает System.String, поэтому я получаю только имя объекта. Если я создаю класс и объект в PowerShell вручную, помещаю туда данные и передаю их в индекс, тип custClass.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вызов powershell.exe приводит все к строкам. Вместо этого запустите файл сценария напрямую:

Файл: sub.ps1

param(
  [object]$foo
)

$foo

Файл: main.ps1

class myClass{
    [string]$A
}

$myObject = [myClass]::new()
$myObject.A = "BAR"

.\sub.ps1 $myObject
0 голосов
/ 31 октября 2018

В subscript.ps1 параметр $custClassData должен проверять тип [CustClass], а не [object]. Так что-то вроде:

param(
  [string]$someString,
  [CustClass]$custClassData
 )

Таким образом, данные, передаваемые этому параметру, должны иметь тип [CustClass].

Кроме того, способ, которым вы звоните subscript.ps1 , не выглядит правильным. Вам не нужно вызывать powershell.exe, чтобы вызвать subscript.ps1 . powershell.exe всегда выдаст ошибку здесь.

Вы должны изменить subscript.ps1 на subscript.psm1 , превратить содержимое скрипта в функцию и использовать ее следующим образом:

In subscript.psm1 :

function Do-TheNeedful {
    param(
      [string]$someString,
      [CustClass]$custClassData
    )
    #~
    # do work
    #~
}

В main.ps1

class custClass{
   [string]$string1
   [string]$string2
   [string]$string3
}

Import-Module subscript.psm1

$customizedObject = [custClass]::new()
$customizedObject.string1 = "smthng1"
$customizedObject.string2 = "smthng2"
$customizedObject.string3 = "smthng3"
Do-TheNeedful -someString "a_string" -custClassData $customizedObject
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...