問題は、選択したユーザーがログインしているコンピューターを検索するために使用されるSQLクエリにあります。クエリを実行し、アダプタを使用して結果をテーブルに入力してから、テーブルオブジェクトを配列に読み込みます。Powershellの配列の構文と機能を完全に理解していないため、この部分を間違って実行している可能性があります。テーブルが配列に読み込まれる関数内では、配列の内容は問題ないように見えますが(コンピューター名だけ)、その配列を関数から渡して変数に割り当てると、配列には次のデータが含まれます。{ #、compName}。見つかったコンピューターの数、次に名前のように見えます。1台のコンピューターが見つかった場合、配列は{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
私は完全に迷子になっています、どんな入力でもありがたいです。