问题在于用于查找所选用户已登录的计算机的 SQL 查询。我执行查询,使用适配器将结果填充到表中,然后将表对象读入数组。我不完全理解 Powershell 中数组的语法和功能,所以我可能做错了这部分。在将表读入数组的函数内部,数组的内容看起来不错(只是计算机名称),但是当我将该数组从函数中传递出来并将其分配给变量时,数组具有以下数据:{ #,compName}。它似乎是找到的计算机数量,然后是名称,如果找到一台计算机,则数组是 {1,ComputerName}。但是,如果找到多台计算机(2 台或更多台),则数组为 {2, ComputerNameComputerName}。
这是带有 SQL 查询的函数和用户选择计算机的函数。
Function GetComputerList {
param ($u)
#use the display name of the user to get their login name
$queryUser = Get-ADUser -f{DisplayName -eq $u} #-Properties sAMAccountname | Select sAMAccountname
$queryName = "'"
$queryName += $queryUser.SamAccountName
$queryName += "'"
$query = "SELECT SYS.Netbios_Name0 FROM v_R_System SYS WHERE User_Name0 = $queryName ORDER BY SYS.User_Name0, SYS.Netbios_Name0"
$connection = new-object system.data.sqlclient.sqlconnection( "Data Source=SERVER;Initial Catalog=DATABASE;Integrated Security=SSPI;")
$adapter = new-object system.data.sqlclient.sqldataadapter ($query, $connection)
$table = new-object system.data.datatable
$adapter.Fill($table)
$i = 1
foreach($object in $table) {
<#Write-Host "$i. $($object.Netbios_Name0)"
$i++#>
$compArray += $object.Netbios_Name0
}
foreach($object in $compArray) {
Write-Host "$i. $($object)"
}
return @($compArray)
}
Function SelectComputer {
param ($a)
$computerNum = Read-Host "Please select a computer. (by number)"
$computer = ($a[$computerNum])
return $computer
}
他们是这样称呼的:
$computerArray = GetComputerList -u $selectedUser
$selectedComputer = SelectComputer -a $computerArray
我完全迷失了,任何意见表示赞赏。