Я в Powershell v4.0. У меня есть раскрывающийся список в моем пользовательском интерфейсе, который я заполняю данными из моей базы данных. Вызвать функцию, которая захватывает данные, как так:Powershell Single row datatable return to fill combobox
$ConfigDynamicContractID.ItemsSource = (GetDynamicContracts).DefaultView
На внутреннем интерфейсе это выглядит следующим образом:
function GetDynamicContracts{
$ContractQuery = "select con.ContractNumber as Name, c.ContractID from foo..campaign c inner join foo..campaigntemplate ct on c.campaignid = ct.campaignid
inner join foo..template t on ct.templateid = t.templateid inner join bar..contracts con on con.ContractID = c.ContractID
where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$ContractResult = ExecuteSelect "Bar" $ContractQuery
return , $ContractResult
}
Этот код прекрасно работает. Затем мне сказали, что приведенные выше таблицы не могут разговаривать друг с другом, поэтому я должен делать индивидуальные вызовы для каждого и фильтровать в powershell. Итак, вот мой код для этого:
function GetDynamicContracts{
$CampaignQuery = "Select c.* From foo..Campaign c join foo..CampaignTemplate ct on c.CampaignID = ct.CampaignID
join foo..Template t on ct.TemplateID = t.TemplateID
Where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$CampaignResults = ExecuteSelect "foo" $CampaignQuery
$ContractIDs = New-Object System.Collections.ArrayList
foreach($row in $CampaignResults.Rows){
$ContractIDs.Add($row.ContractID)
}
$ContractIDs = $ContractIDs -join ","
$PHQuery = "Select ContractID, ContractNumber as Name From Contracts Where ContractID in ($ContractIDs)"
$PHResults = ExecuteSelect "Bar" $PHQuery
#Log $MyInvocation.MyCommand $PSBoundParameters
return ,$PHResults
}
Этот код по какой-то причине не работает при возврате одной строки. Но если я сломаю этот вызов функции на два отдельных, то он работает. Смотрите ниже:
function GetDynamicContracts{
$ContractIDs = GetDynamicCampaign
$ContractIDs = $ContractIDs[1]
$PHQuery = "Select ContractID, ContractNumber as Name From Contracts Where ContractID in ($ContractIDs)"
$PHResults = ExecuteSelect "PhytelMaster" $PHQuery
Log $MyInvocation.MyCommand $PSBoundParameters
return ,$PHResults
}
function GetDynamicCampaign{
$CampaignQuery = "Select c.* From Campaign..Campaign c join Campaign..CampaignTemplate ct on c.CampaignID = ct.CampaignID
join Campaign..Template t on ct.TemplateID = t.TemplateID
Where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$CampaignResults = ExecuteSelect "Campaign" $CampaignQuery
$ContractIDs = New-Object System.Collections.ArrayList
foreach($row in $CampaignResults.Rows){
$ContractIDs.Add($row.ContractID)
}
$ContractIDs = $ContractIDs -join ","
return $ContractIDs
}
Кажется, что делает два выполнения выбирает в одной функции приводит к тому, «», чтобы не делать то, что он делает, когда возвращает данные. Может кто-нибудь объяснить, почему? Спасибо заранее, и, поскольку у меня есть обходной путь, нет спешки.
ArrayList.add spams на выходе с индексом добавленного предмета и AFAIK он всегда должен быть подавлен независимо от операторов 'return' с'> $ null' или '| Из-Null'. Просто говорю. – wOxxOm
Функции PowerShell выводят все на конвейер, который иначе не перенаправлен. Использование ключевого слова 'Return' является избыточным и избыточным. Поэтому, когда я просматриваю метод 'Add'' ArrayList' ([здесь] (https://msdn.microsoft.com/en-us/library/system.collections.arraylist.add%28v=vs.110%29 .aspx? f = 255 & MSPPError = -2147217396)) показывает, что метод выводит индекс добавленного элемента. Если это не перенаправлено, вы получите этот вывод 'Int' в конвейер в дополнение ко всему, что вам может понадобиться. – TheMadTechnician
Благодарим вас за ответы. Это довольно раздражающий аспект Powershell. Я нашел в другом потоке, что если я завершу код в своей функции с помощью $ null = @ {'do code'}, а затем в конце, когда я сделаю return (return $ a), возвращается только $ a. Это некрасиво, но, похоже, не дает никаких хлопот с помощью PowerShell. – SuperVillainPresident