首页 > 解决方案 > PowerShell,提取具有所有者和用户的 SharePoint 网站列表,并制作 CSV

问题描述

我正在尝试编写一个 PowerShell 脚本,以部分结果完成以下任务:

  1. 检索在 URL 中包含特定单词的 SharePoint 网站(包括 OneDrive 网站)列表 (done) ;
  2. 使用 ForEach-Object 检索每个站点的所有者和用户列表(完成);
  3. 将这些信息导出为 CSV 文件(部分完成);

我的问题是数字 3,我试图用一列作为网站 URL,一列为所有者,第三列包含所有用户,但不幸的是,我只能用里面的用户列表,这是让我想到这一点的代码:


$username = "username@domain.onmicrosoft.com"
$password = "password" | ConvertTo-SecureString -asPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
$Tenanturl = "https://domain-admin.sharepoint.com/"

# Connessione all'account Admin SharePoint
Connect-SPOService -Url $TenantUrl -Credential $credential
Get-SPOSite -IncludePersonalSite $true -Limit all -Filter "Owner -like 'WordIWantToFilter'" | 

ForEach-Object {
Get-SPOUser -Site $_.Url
} | 

Select-Object -Property LoginName,UserType | 

Export-Csv -Path "C:\Users\User\Desktop\SharePoint_Sites_List.csv" -NoTypeInformation

结果是一个 CSV 文件,在单元格 A1 中包含 LoginName,"UserType",在其他行中包含相关信息。


我要完成的工作:第一列是网站 URL,第二列是网站所有者,第三列是每个网站的所有用户。


我知道我遗漏了很多东西,但我不是开发人员:),这些是我用来制作这段代码的一些链接,

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-7 https://techcommunity.microsoft.com/t5/sharepoint/list-all -site-collection-admins-powershell/mp/264135

我应该寻找什么?我正在寻找提示,甚至只是一小段代码,谢谢

标签: powershellcsvsharepointforeachsharepoint-online

解决方案


我预测你会在这里遇到这种结构的麻烦:

Get-SPOSite -IncludePersonalSite $true -Limit all -Filter "Owner -like 'WordIWantToFilter'" | 

ForEach-Object {
Get-SPOUser -Site $_.Url
} | 

Select-Object -Property LoginName,UserType | 

Export-Csv -Path "C:\Users\User\Desktop\SharePoint_Sites_List.csv" -NoTypeInformation

这些管道会让事情变得混乱。作为在多家公司工作了五年的自动化顾问和工程师,我会避免过度依赖管道,因为它会使调试代码变得棘手且容易出错。

我会像这样重写它,尽量减少那些管道语句:

$filteredSites = Get-SPOSite -IncludePersonalSite $true -Limit all -Filter "Owner -like 'WordIWantToFilter'"

"Found $($filteresSites.Counts) from previous line"

$sitesArray=@() #make empty array to hold results
ForEach($site in $filteredSites){
   $sitesArray += Get-SPOUser -Site $_.Url
}
"Have $($sitesArray.Count) sites from previous line"

#good place to debug the output, btw :)
#prepare to export
"Run in the PowerShell ISE, we will have a left-over object `$sitesArray` we can use to test exporting "

$sitesArray | Select-Object -Property LoginName,UserType | 
Export-Csv -Path "C:\Users\User\Desktop\SharePoint_Sites_List.csv" -NoTypeInformation

然后使用它,在 PowerShell ISE 中打开这一切并运行它。您将获得一些有用的日志记录到控制台,并且 ISE 会留下一些时间变量状态,这使得故障排除变得非常容易。

这些更改将使您更容易确定丢失数据的位置。例如,如果您运行此程序并看到一个空文件,并且还有一个空文件$sitesArray,那么您的过滤内容$filteredSites太排斥了。

如果您仍然卡住,请发布更新。


推荐阅读