变量值未显示

时间:2015-12-29 10:13:50

标签: sql-server powershell powershell-v2.0

执行以下脚本后,我无法在name变量中查看属性$demo1的值,但对于变量$demo,我可以看到该属性所有属性的值。任何人都可以帮我这个吗?

注意:两个变量的类型相同(Selected.System.Data.DataRow)。

$demo.drive工作正常,$demo1.name$demo1.log_size_in_mb$demo1.db_size_in_mb无效。

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$serverInstance = New-Object ('Microsoft.SqlServer.Management.Smo.server')
$db = New-Object ('Microsoft.SqlServer.Management.Smo.Database')

$db = $serverinstance.Databases.Item("Master")

$ds = $db.ExecuteWithResults("xp_fixeddrives")

$ds1 = $db.ExecuteWithResults("select dbid
,d.name
,d.compatibility_level
,d.recovery_model_desc
,convert(decimal(18,2),(sum(size)*8)/1024.0) as db_size_in_mb
,(select (size*8)/1024.0 from sys.sysaltfiles where dbid=saf.dbid and groupid=0) as log_size_in_mb
from sys.sysaltfiles saf
join sys.databases d on saf.dbid=d.database_id
where groupid>0
group by dbid,d.name,d.compatibility_level,d.recovery_model_desc")

for ($i=0; $i -lt $ds.Tables.Count; $i++) {
    $res = $ds.Tables[$i]
}

for ($i=0; $i -lt $ds1.Tables.Count; $i++) {
    $res1 = $ds1.Tables[$i]
}

$demo1 = @()
$demo  = $res | select PSComputerName, Drive, 'MB Free'
$demo1 = $res1 | select Name, recovery_model_desc, db_size_in_mb, log_size_in_mb

$demo1.name

1 个答案:

答案 0 :(得分:1)

您正在使用PowerShell v2,而$demo1包含一个数组(多个表行)。 PowerShell v3引入了自动展开(通过调用数组对象上的属性或方法来访问数组元素的属性或方法的能力)。

在PowerShell v2中$array.Name将尝试获取数组对象本身的属性Name 的值。由于数组对象没有这样的属性,因此返回$null

您需要做的是获取各个数组元素的所需属性,例如:

$demo1 | Select-Object -Expand Name

或者像这样:

$demo1 | ForEach-Object { $_.Name }