当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 导出 Yammer 用户个人资料照片

作者:精品下载站 日期:2024-12-14 18:47:30 浏览:14 分类:玩电脑

使用 PowerShell 导出 Yammer 用户个人资料照片


Yammer 允许您将用户导出到 CSV 文件,但没有个人资料图片。但是有一个 Yammer API,因此使用 PowerShell 和 CSV 文件中的数据,我们也能够获取个人资料图片。

导出 Yammer 用户 CSV 文件

首先,我们需要一个包含所有用户的 CSV 文件,您需要成为 Yammer 站点的网络管理员。转至设置 > 网络管理 > 导出用户并导出所有用户。

打开 CSV 文件时,您将看到一列,其中包含指向每个用户的 Yammer API 的链接。当您在浏览器中打开此 url 时,您将获得一个包含用户数据的 XML 文件。

该 XML 文件中有一个属性 mugshot-url,这就是我们想要的个人资料图片。

连接到 Yammer API

在与 Yammer API 交互之前,我们首先需要注册一个应用程序,以便我们可以授权请求。 Patrick Lamber 写了一篇关于此的精彩文章,您可以在这里找到它。简而言之,请执行以下操作:

  1. 确保您以管理员身份登录到 Yammer

  2. 转到以下地址:https://www.yammer.com/client_applications

  3. 注册您的应用程序,您可以使用面部地址

  4. 注册后,点击为此应用程序生成开发人员令牌

完成后,将生成的(不记名)令牌复制到某处,我们稍后需要它。

创建 PowerShell 脚本

因此,我们有一个包含所有用户的 CSV 文件、指向其 XML 文件的链接,并且有一个用于身份验证的不记名令牌。开始编写脚本的时间:

第 1 步 - 导入 CSV 文件并过滤用户

我添加了一个文件,以便您可以选择所有用户或仅选择活动用户。

#Set some variables
$csvFile = "C:\temp\yammer\Users.csv"
$exportFolder = "c:\temp\yammer\users\"
$allUsers = $false

#Import CSV
$csv = Import-Csv $csvFile -Delimiter ","
$state = if ($allUsers) { '*' } else { 'active' }

#Filter users
$users = $csv | Where-Object state -Like $state

第 2 步 - 创建 REST API 标头

要下载需要进行身份验证的 XML 文件,我们可以使用之前从 Yammer 开发人员控制台获取的不记名令牌来完成此操作。

#Connect to Yammer API
$baererToken = "455423-asdwewqADSLKSAHDL" #Fake token ?

$headers = @{ Authorization=("Bearer " + $baererToken) }

第 3 步 - 获取 XML 文件

对于每个用户,我们需要获取 XML 文件。 invoke-webrequest 返回一个字符串,因此我们将其转换为 XML 以使其更易于使用。

$response = Invoke-WebRequest -Uri $user.api_url -Method Get -Headers $headers -ContentType "application/xml"
$xml = [xml]$response

第 4 步 - 下载个人资料照片

我们通过网络请求下载照片:

Invoke-WebRequest -Uri $xml.response.'mugshot-url' -OutFile $exportFolder$xml.response.name -Method Get -Headers $headers

第 5 步 - 将它们放在一起

上面的代码片段需要放在一起,您想要循环 CSV 用户,根据名称创建输出位置,可能请求与默认 48×48 不同的尺寸,并检查他们是否有照片集。

因此,当我们将所有和平组合在一起时,我们得到以下脚本:

$csvFile = "C:\temp\yammer\Users.csv"
$exportFolder = "c:\temp\yammer\users\"
$allUsers = $false

$csv = Import-Csv $csvFile -Delimiter ","
$state = if ($allUsers) { '*' } else { 'active' }

#filter users
$users = $csv | Where-Object state -Like $state

#connect to Yammer API
$baererToken = "455423-asdwewqADSLKSAHDL" #Fake token ?

$headers = @{ Authorization=("Bearer " + $baererToken) }

foreach ($user in $users)
{
	#set output filename
	$output = $exportFolder + $user.name + '.png'
	
	#get xml
	$response = Invoke-WebRequest -Uri $user.api_url -Method Get -Headers $headers -ContentType "application/xml"
	$xml = [xml]$response

	#get profile address from xml file
	$photoUrl = $xml.response.'mugshot-url'

	$url = $photoUrl.replace('48x48','256x256')
	
	#download photo
	if ($photoUrl) {
		
		#Check if it's a user picture or placeholder
		if ($photoUrl -Match 'no_photo') {
			#Do something else
		}else{
			Invoke-WebRequest -Uri $url -OutFile $output -Method Get -Headers $headers
		}
		
	}
}

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯