Powershell: как создать собственный объект и передать его в функцию powershell?
Я хочу создать пользовательский объект со свойствами в PowerShell, а затем передать этот объект в функцию. Я нашел онлайн пример для создания пользовательского объекта, но он использует HashTable. Тем не менее, у меня есть один объект со свойствами, а не массив объектов.
- Если возможно, я бы хотел создать один объект вместо HashTable.
- Если HashTables - это путь, как мне получить объект и передать его функции?
Ниже приведен пример моего кода:
function CreateObject()
{
$properties = @{
'TargetServer' = “ServerName”;
'ScriptPath' = “SomePath”;
'ServiceName' = "ServiceName"
}
$obj = New-Object -TypeName PSObject -Property $properties
Write-Output $obj.TargetServer
Write-Output $obj.ScriptPath
Write-Output $obj.ServiceName
return $obj
}
function Function2([PSObject] $obj)
{
Do something here with $obj
}
$myObj = CreateObject
Function2 $myObj
РЕДАКТИРОВАТЬ 1
Спасибо @Frode и @Matt. Я не знал, что оператор return вернет и другие результаты. Будет ли следующая работа?
function CreateObject()
{
return New-Object -TypeName PSObject -Property @{
'TargetServer' = "ServerName"
'ScriptPath' = "SomePath"
'ServiceName' = "ServiceName"
}
}
function Init()
{
// Do something here
$myObject = CreateObject()
// Do something here with $myObject
return $myObject
}
function Funcntion2([PSObject] $obj)
{
//Do somthing with $obj
}
$obj = Init
Function2 $obj
2 ответа
Из about_return Важно знать, что
В Windows PowerShell результаты каждого оператора возвращаются как выходные данные, даже без оператора, содержащего ключевое слово Return.
Итак, как сказал Фроде, вы получите массив строк. Вы хотите вернуть свой объект в целом, а не его части. Если цель вашей функции - просто вернуть этот пользовательский объект, то вы можете сократить этот оператор до одной строки.
function CreateObject()
{
return New-Object -TypeName PSObject -Property @{
'TargetServer' = "ServerName"
'ScriptPath' = "SomePath"
'ServiceName' = "ServiceName"
}
}
Если у вас есть хотя бы PowerShell 3.0, вы можете использовать [pscustomobject]
Введите приведение, чтобы выполнить то же самое.
function CreateObject()
{
return [pscustomobject] @{
'TargetServer' = "ServerName"
'ScriptPath' = "SomePath"
'ServiceName' = "ServiceName"
}
}
Обратите внимание, что в обоих случаях return
ключевое слово является необязательным, но знайте, что оно все еще служит цели как логический выход функции (все выходные данные до тех пор, пока эта точка не будет возвращена).
Если вам не нужно сохранять результаты функции в переменной, вы также можете просто связать ее в следующую функцию.
Function2 (CreateObject)
Вы создаете объект. Хеш-таблица - это просто заполнитель, используемый для определения всех свойств перед их превращением в объект.
Удалите три строки, начинающиеся с write-output
и тебе должно быть хорошо. Они не нужны и заставляют вашу функцию возвращать массив, а не просто объект, как вы хотели. использование write-host
если вы хотите отобразить значения на экране во время тестирования.