如何将PowerShell提取的Yammer组成员保存到Azure SQL数据库?
将Yammer组成员数据导入Azure SQL数据库的实现方案
1. 修改PowerShell脚本直接写入Azure SQL表
首先需要在Azure SQL数据库中创建匹配Yammer用户字段的表,示例建表语句:
CREATE TABLE YammerGroupMembers ( Id INT PRIMARY KEY, FullName NVARCHAR(255), Email NVARCHAR(255), JobTitle NVARCHAR(255), Department NVARCHAR(255), CreatedAt DATETIME );
然后修改原PowerShell脚本,在获取成员数据后直接批量插入Azure SQL表,避免逐条插入的性能损耗:
$GroupId=xxxxx $Token = "xxxx" $Headers = @{ "Authorization" = "Bearer "+$Token } # Azure SQL连接配置 $connectionString = "Server=tcp:<你的SQL服务器名>.database.windows.net,1433;Initial Catalog=<数据库名>;Persist Security Info=False;User ID=<用户名>;Password=<密码>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" $tableName = "YammerGroupMembers" $YammerGroups = @() $GroupCycle = 1 DO { $GetMoreGroupsUri = "https://www.yammer.com/api/v1/users/in_group/$GroupId.xml?page=$GroupCycle" write-host ("REST API CALL : $GetMoreGroupsUri") [xml]$Xml = ((Invoke-WebRequest -Uri $GetMoreGroupsUri -Method Get -Headers $Headers).content) $YammerGroups += $Xml.response.users.user $GroupCycle ++ $GroupCount += $Xml.response.users.user.count write-host ("GROUPMEMBER COUNT : $GroupCount") } While ($Xml.response.users.user.count -gt 0) # 过滤空数据并转换为DataTable $filteredMembers = $YammerGroups | Where {$_} $dt = New-Object System.Data.DataTable $dt.Columns.Add("Id", [int]) $dt.Columns.Add("FullName", [string]) $dt.Columns.Add("Email", [string]) $dt.Columns.Add("JobTitle", [string]) $dt.Columns.Add("Department", [string]) $dt.Columns.Add("CreatedAt", [datetime]) foreach ($member in $filteredMembers) { $row = $dt.NewRow() $row["Id"] = $member.id $row["FullName"] = $member.full_name $row["Email"] = $member.email $row["JobTitle"] = $member.job_title $row["Department"] = $member.department $row["CreatedAt"] = [datetime]$member.created_at $dt.Rows.Add($row) } # 批量插入到Azure SQL $bulkCopy = New-Object Data.SqlClient.SqlBulkCopy($connectionString) $bulkCopy.DestinationTableName = $tableName $bulkCopy.WriteToServer($dt) write-host "数据已成功写入Azure SQL表"
注意:需根据Yammer API返回的实际字段调整DataTable列,确保与SQL表结构完全匹配。
2. 使用Azure SQL的批量导入功能
如果希望保留原脚本导出CSV的逻辑,可通过以下Azure SQL原生功能完成导入:
方法一:使用bcp命令行工具
安装SQL Server命令行工具后,执行以下命令批量导入CSV:
bcp <数据库名>..YammerGroupMembers in "$GroupId.csv" -S <SQL服务器名>.database.windows.net -d <数据库名> -U <用户名> -P <密码> -c -t, -r\n -F 2
参数说明:
-c:采用字符格式导入-t,:指定逗号为字段分隔符-r\n:指定换行符为行结束符-F 2:跳过CSV的表头行
方法二:使用BULK INSERT语句
先将CSV上传至Azure Blob存储,然后在Azure SQL中执行:
BULK INSERT YammerGroupMembers FROM '<Blob存储中CSV的SAS URL>' WITH ( FORMAT = 'CSV', FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', MAXERRORS = 0 );
该方式无需本地操作,适合云端自动化同步场景。
3. 其他云端自动化方法
Azure Logic Apps
完全脱离本地脚本,实现端到端自动化:
- 创建定时触发的Logic App
- 添加Yammer连接器,调用
List users in group接口获取成员数据 - 添加Azure SQL连接器,用
Batch insert rows操作批量写入SQL表
适合长期自动同步的需求,无需维护本地脚本。
Azure Functions
编写PowerShell/C#类型的Azure Function,定时触发调用Yammer API,处理数据后写入Azure SQL。灵活性更高,适合需要自定义数据清洗、转换逻辑的场景。
内容的提问来源于stack exchange,提问作者Andrii Rozrutskyi
相关产品推荐
相关产品推荐

