PowerShell,提取具有所有者和用户的 SharePoint 站点列表,并制作 CSV

PowerShell, extracting a list of SharePoint sites with owners and users, and making a CSV

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

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

我的问题是数字 3,我试图用一列用于网站 URL,一列用于所有者,第三列包含所有用户, 但不幸的是,我只能制作包含用户列表的 csv,这是让我走到这一步的代码:


$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",其他行中有相关信息。


我想要完成的事情: 网站网址的第一列, 网站所有者的第二列, 第三列包含每个站点的所有用户。


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

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/m-p/264135

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

我预测你会 运行 陷入这种结构的困境:

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

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

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

$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 中的过滤过于排他。

如果您仍然遇到问题,post 更新。