PowerShell,提取具有所有者和用户的 SharePoint 站点列表,并制作 CSV
PowerShell, extracting a list of SharePoint sites with owners and users, and making a CSV
我正在尝试编写一个 PowerShell 脚本来完成以下任务并获得部分结果:
- 检索包含 url 中特定单词的 SharePoint 网站(包括 OneDrive 网站)列表(完成);
- 使用 ForEach-Object 检索每个站点的所有者和用户列表(完成);
- 将这些信息导出到 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 更新。
我正在尝试编写一个 PowerShell 脚本来完成以下任务并获得部分结果:
- 检索包含 url 中特定单词的 SharePoint 网站(包括 OneDrive 网站)列表(完成);
- 使用 ForEach-Object 检索每个站点的所有者和用户列表(完成);
- 将这些信息导出到 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 更新。