我想从表中提取用户列表,使用Get-ADUser查找他们的电子邮件,然后将结果写回到SQL表中。到目前为止,我可以将结果集保存到csv中。文件,但是如何写表。
$connString = "Server = 'sql1'; Database = 'test'; Integrated Security = True"
$QueryText = 'SELECT [ADUser] FROM [test].[dbo].[Users]'
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $connString
$SqlCommand = $SqlConnection.CreateCommand()
$SqlCommand.CommandText = $QueryText
$DataAdapter = new-object System.Data.SqlClient.SqlDataAdapter $SqlCommand
$dataset = new-object System.Data.Dataset
$DataAdapter.Fill($dataset)
$dataset.Tables[0] | ForEach {
Get-ADUser -identity $_.ADUser -Properties Name, SamAccountName,mail |
Select Name, SamAccountName, mail |
Export-CSV C:\Users\export3.csv -Append -Encoding UTF8
}
答案 0 :(得分:3)
为此,我将使用很棒的PowerShell社区DBATools模块。它由一些长期的PowerShell和SQL MVP编写,使这项工作变得容易。
首先,使用
安装模块Install-Module DBATools
该模块有两个命令需要我们执行。首先,使用ConvertTo-DBADataTable
将常规PowerShell对象转换为SQL DataTable,然后使用Write-DBADataTable
将其写入SQL DB。
这就是它的样子。我首先在名为DBATools
的SQL实例上创建一个名为SCCM
的新SQL DB。接下来,我获得了要插入表中的用户列表。
接下来,我将其传送到| ConvertTo-DbaDataTable
中并将其存储在变量中。
$DataTable = get-aduser -Filter * | select Name,DistinguishedName,SurName | ConvertTo-DbaDataTable
最后,我运行Write-DBADataTable
将这些行写入新表(通过添加-AutoCreateTable
创建新表)
Write-DbaDataTable -SqlInstance SCCM -Database DBATools `
-InputObject $DataTable -Table UserTable -AutoCreateTable
现在,我转到SSMS并刷新以查看创建了具有适当列的新表!很棒,轻松自如!