Я работаю с Powershell 4 под Windows 7, и у меня есть командлет, определенный следующим образом:
Function Transfer-File {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[System.Management.Automation.PSCustomObject]
$source,
# other parameters removed for brevity
)
# actual logic does not matter
}
Я вызываю это так:
$hasError = Transfer-File -source $source -destination $cfg.Destination -logfile $logFile
$source получается путем разбора файла JSON и выглядит так:
@{Path=some path string here; Pack=False}
Write-Host $source.GetType()
выходы:
System.Management.Automation.PSCustomObject
Я получаю следующую ошибку:
Невозможно преобразовать значение "@{Path=некоторая строка пути здесь; Pack=False}" типа "System.Management.Automation.PSCustomObject" в тип "System.Management.Automation.PSCustomObject".
В отчаянной попытке решить ее эмпирическим путем я заменил System.Management.Automation.PSCustomObject
на psobject
, и, похоже, все работает нормально.
Вопрос. Почему мой System.Management.Automation.PSCustomObject
не соответствует System.Management.Automation.PSCustomObject
из прототипа командлета?
Полный код для создания объекта:
### Configuration ###
$cfg = New-Object –TypeName PSObject
$cfg | Add-Member -MemberType NoteProperty –Name Sources –Value @()
# get configuration from json file
$jsonContent = Get-Content .\config.json | Out-String
$jsonObj = ConvertFrom-Json $jsonContent
$cfg.Sources = $jsonObj.Sources
Foreach ($source in $cfg.Sources)
{
# Write-Host $source.GetType()
$hasError = Transfer-File -source $source -destination $cfg.Destination -logfile $logFile
}
$source
? ЧерезNew-Object
? - person tukan   schedule 07.03.2018[System.Management.Automation.PSCustomObject]
— это одноэлементный объект, экземпляр которого используется для представления того факта, что в[System.Management.Automation.PSObject]
нет значимого базового объекта. - person user4003407   schedule 07.03.2018