0
我有一個簡單的函數來查找Oracle中的一些數據,並返回一個由表中各種數據元素組成的對象。PowerShell函數返回意外的數據
function Get-OracleInfo {
[OutputType([PSObject])]
Param( [Parameter(Mandatory=$False)][string]$BindValue,
[Parameter(Mandatory=$True)][string]$OraclePath,
[Parameter(Mandatory=$True)][string]$OracledbConnectionString,)
Begin {
$Query="select stuff......"
Add-Type -Path $OraclePath
}
PROCESS {
#get data
try {
$connection=New-Object Oracle.ManagedDataAccess.Client.OracleConnection($OracledbConnectionString)
$connection.Open()
$OprIDLookupCmd=$connection.CreateCommand()
$OprIDLookupCmd.CommandText=$Query
#set bind value to parameter
$OprIDLookupBindParam = New-Object Oracle.ManagedDataAccess.Client.OracleParameter
$AccountLookupBindParam.Value = $BindValue
$AccountLookupCmd.Parameters.Add($AccountLookupBindParam)
$AccountRdr=$AccountLookupCmd.ExecuteReader()
if ($AccountRdr.Read()) {
$accountInfo = New-Object psobject -Property @{'StringVal1'=$AccountRdr.Item("field1")
'StringVal2'=$AccountRdr.Item("field2")
'Date1'=[datetime]$AccountRdr.Item("field3")}
}
}
catch
{
Write-Error ("Error in lookup Account - Can't open connection: {0}`n{1}" -f
$connection.ConnectionString, $_.Exception.ToString())
}
}
END {
if ($connection.State -eq 'Open') { $connection.close() }
return $accountInfo
}
它在Oracle中獲取數據就好了,並將表格字段賦值給對象就好了。當在調試中運行它時,查看變量$ accountInfo的值,它將返回一個包含3個屬性的對象,就像預期的一樣。
String1 Date2 String2
-------- ------------ -----
StringVal2 5/11/2016 12:00:00 AM StringVal2
但主叫從命令行功能並將其分配給一個變量.....當從函數返回時,它顯示爲具有2個元素的陣列。 $ UserData [1]是返回的對象(表示它顯示具有Stringval1,Stringval2,Date1的3個屬性的對象)。我弄不明白的是爲什麼它以數組的形式返回,並且第一個元素(即$ UserData [0])是一個OracleObject。運行命令
$UserData | Get-Member
TypeName: Oracle.ManagedDataAccess.Client.OracleParameter
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
Dispose Method void Dispose(), void IDisposable.Dispose()
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetType Method type GetType()
InitializeLifetimeService Method System.Object InitializeLifetimeService()
ResetDbType Method void ResetDbType()
ResetOracleDbType Method void ResetOracleDbType()
ToString Method string ToString()
ArrayBindSize Property int[] ArrayBindSize {get;set;}
ArrayBindStatus Property Oracle.ManagedDataAccess.Client.OracleParameterStatus[] ArrayBindStatus {get;set;}
CollectionType Property Oracle.ManagedDataAccess.Client.OracleCollectionType CollectionType {get;set;}
DbType Property System.Data.DbType DbType {get;set;}
Direction Property System.Data.ParameterDirection Direction {get;set;}
IsNullable Property bool IsNullable {get;set;}
Offset Property int Offset {get;set;}
OracleDbType Property Oracle.ManagedDataAccess.Client.OracleDbType OracleDbType {get;set;}
OracleDbTypeEx Property Oracle.ManagedDataAccess.Client.OracleDbType OracleDbTypeEx {get;set;}
ParameterName Property string ParameterName {get;set;}
Precision Property byte Precision {get;set;}
Scale Property byte Scale {get;set;}
Size Property int Size {get;set;}
SourceColumn Property string SourceColumn {get;set;}
SourceColumnNullMapping Property bool SourceColumnNullMapping {get;set;}
SourceVersion Property System.Data.DataRowVersion SourceVersion {get;set;}
Status Property Oracle.ManagedDataAccess.Client.OracleParameterStatus Status {get;set;}
UdtTypeName Property string UdtTypeName {get;set;}
Value Property System.Object Value {get;set;}
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Date1 NoteProperty datetime Date1=5/11/2016 12:00:00 AM
StringVal2 NoteProperty string StringVal2=String2
StringVal1 NoteProperty string StringVal1=String1
希望我的事件和問題的解釋意義時,下面是詳細信息.....我完全狼狽,所以欣賞任何幫助。 謝謝!
感謝邁克,是沒有的伎倆!我很想理解爲什麼這會起作用..... – Jeff
這是因爲輸出沒有被「捕獲」,所以它被添加到函數的輸出流中。 –
該行爲在[documentation](https://msdn.microsoft.com/en-us/powershell/reference/3.0/microsoft.powershell.core/about/about_return)中進行了解釋。 –