0

我有以下脚本允许我从 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 

我得到了这个结果的例子:

获取 MAC 1IT001 2

苹果电脑

--- F4:CE:46:2C:21:FE
F4:CE:46:2C:21:FE

我怎样才能从这个结果中得到第一个或第二个 MAC?我的意思是我想在 $MAC1 和 $MAC2 中得到结果...

对不起我的英语,谢谢你的阅读。

4

1 回答 1

1

除非在查询中也使用了an ,否则SELECT语句不会以任何特定顺序返回项目。ORDER BY如果您不订购该集合,则运行两次查询可能会返回不同的值。

为了检索第 n 个元素,首先检查返回的行数。ADataTable具有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
于 2013-05-24T19:31:26.460 回答