【发布时间】:2016-04-03 04:59:13
【问题描述】:
执行以下脚本后,我无法查看$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
【问题讨论】:
-
在我的系统上运行没有任何问题,所以这可能是特定于版本或配置的问题。
$res1是否包含敏感数据? -
您查询的是什么版本的 SQL Server?
sys.sysaltfiles已弃用,sys.master_files视图可能会让您更幸运 -
@MathiasR.Jessen:sysaltfiles 也按预期返回结果,只是我无法从变量中检索属性值。
-
@vonPryz:您使用的是哪个版本的 powershell?我正在使用 V2
-
$res1是否真的包含一个表格?另外,如果你只保留最后一个,为什么要在循环中将表分配给一个变量?
标签: sql-server powershell powershell-2.0