2013-05-28 47 views
2

我有一个奇怪的问题,在两个相同的代码:同样的代码,但不同的结果

第一招:

$arraysch= @() 
$hash = @{} 

Add-Type -Path "C:\app\aasif\product\11.2.0\client_2\odp.net\managed\common\Oracle.ManagedDataAccess.dll" 

$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection("User Id=sys;Password=password;Data Source=Myserver/oracle;DBA privilege=SYSDBA") 
$con.Open() 
$cmd=$con.CreateCommand() 
$cmd.CommandText="select distinct owner from all_tables where table_name = 'Mytable'" 
$rdr=$cmd.ExecuteReader() 

while ($rdr.Read()) { 
    $arraysch += $rdr.GetString(0) 
} 

$hash["Myserver"] = [array]$arraysch 

$con.close() 

,第二个,是谁在功能,但它是相同的:

$arraysch= @() 
$hash = @{} 

Add-Type -Path "C:\app\aasif\product\11.2.0\client_2\odp.net\managed\common\Oracle.ManagedDataAccess.dll" 

function GetOracleDb { 
param([string]$servername) 
$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection("User Id=sys;Password=password;Data Source=$servername/oracle;DBA privilege=SYSDBA") 
$con.Open() 
$cmd=$con.CreateCommand() 
$cmd.CommandText="select distinct owner from all_tables where table_name = 'Mytable'" 
$rdr=$cmd.ExecuteReader() 
while ($rdr.Read()) { 
    $arraysch += $rdr.GetString(0) 
} 
$hash[$servername] = [array]$arraysch 
$con.close() 
} 

GetOracleDb "Myserver" 

第一个代码给我这个结果我$哈希

MYSERVER {TEST1,TEST2,TEST3,TEST4 ...}

,第二个给我这个

MYSERVER {} TEST1TEST2TEST3TEST4TEST5TEST6

为什么当我把代码中的一个功能,我没有在$哈希值逗号?

+0

您是否尝试过初始化'$ arraysch = @()'和'$哈希= @ {}'函数中然后返回他们? – Richard

回答

3

这是PowerShell 2.0 ans 3.0之间的区别。我使用下面的代码来重现你的麻烦。

$arraysch= @() 
$hash = @{} 
function test { 
param([string]$servername) 

$arraysch += "A" 
$arraysch += "B" 

$hash[$servername] = [array]$arraysch 
} 

test "coucou" 
$hash 

它在PowerShell 2.0中工作,不在PowerShell 3.0中。出于某种原因,在PowerShell 3.0中,函数$arraysch不被视为集合,而是作为string,因此$arraysch += $rdr.GetString(0)只是串联字符串。只写$arraysch= @()函数内部解决问题,但我不明白区别。

在PowerShell的3.0它适用于:

$hash = @{} 
function test { 
param([string]$servername) 

$arraysch= @() 
$arraysch += "A" 
$arraysch += "B" 

$hash[$servername] = [array]$arraysch 
} 

test "coucou" 
$hash 

或:

$arraysch= @() 
$hash = @{} 
function test { 
param([string]$servername) 

$global:arraysch += "A" 
$global:arraysch += "B" 

$hash[$servername] = [array]$arraysch 
} 

test "coucou" 
$hash 
相关问题