变量值不显示
Variable value not showing up
执行以下脚本后,我无法查看 $demo1
变量中 属性 name
的值,但是对于变量 $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
您正在使用 PowerShell v2,并且 $demo1
包含一个数组(多个 table 行)。引入了自动展开(通过调用数组 object 上的 属性 或方法来访问数组 elements 的属性或方法的能力)使用 PowerShell v3.
在 PowerShell v2 中 $array.Name
将尝试获取数组对象本身 属性 Name
的值 。由于数组对象没有这样的 属性 this returns $null
.
您需要做的是获取所需的 属性 个单独的数组元素,例如:
$demo1 | Select-Object -Expand Name
或者像这样:
$demo1 | ForEach-Object { $_.Name }
执行以下脚本后,我无法查看 $demo1
变量中 属性 name
的值,但是对于变量 $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
您正在使用 PowerShell v2,并且 $demo1
包含一个数组(多个 table 行)。引入了自动展开(通过调用数组 object 上的 属性 或方法来访问数组 elements 的属性或方法的能力)使用 PowerShell v3.
在 PowerShell v2 中 $array.Name
将尝试获取数组对象本身 属性 Name
的值 。由于数组对象没有这样的 属性 this returns $null
.
您需要做的是获取所需的 属性 个单独的数组元素,例如:
$demo1 | Select-Object -Expand Name
或者像这样:
$demo1 | ForEach-Object { $_.Name }