我有以下脚本允许我从MS SQL Db获取MAC地址。
Function Get-MAC ($Server)
{
$SQLServer = "TVEAPP02" #use Server\Instance for named SQL instances!
$SQLDBName = "EuropeanMacs"
$SqlQuery = "select MAC from dbo.tbl_MAC WHERE HOST = '$Server'"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
}
GET-MAC Computerrname
我得到了这个结果的例子:
GET-MAC 1IT001 2
MAC
--- F4:CE:46:2C:21:FE
F4:CE:46:2C:21:FE
如何从此结果中获得第一个或第二个MAC? 我的意思是我希望在$ MAC1和$ MAC2 ......
中得到结果抱歉我的英文,谢谢你的阅读。
答案 0 :(得分:1)
SELECT
语句将不以任何特定顺序返回项目,除非在查询中也使用ORDER BY
。如果您不对该集进行排序,则运行该查询两次可能会返回不同的值。
要检索第n个元素,请先检查返回的行数。 DataTable
具有属性Rows
,其中包含行数。像这样,
$DataSet.Tables[0].Rows.Count
在行计数已知(因此您不指向不存在的行)之后,通过行索引和列名称访问数据。假设第3行中的MAC地址是46:2C:21:FE:F4:CE,检索它。行索引从零开始,就像表索引一样。像这样,
PS C:\> $DataSet.Tables[0].Rows[2].MAC
46:2C:21:FE:F4:CE
要将两个MAC地址放在不同的变量中,只需使用赋值运算符。像这样,
PS C:\> $MAC1 = $DataSet.Tables[0].Rows[0].MAC
PS C:\> $MAC2 = $DataSet.Tables[0].Rows[1].MAC