【问题标题】:PowerShell, extracting a list of SharePoint sites with owners and users, and making a CSVPowerShell,提取具有所有者和用户的 SharePoint 网站列表,并制作 CSV
【发布时间】:2021-01-07 19:01:13
【问题描述】:

我正在尝试编写一个 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",其他行中包含相关信息。


我想要完成的事情: 网站 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/m-p/264135

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

【问题讨论】:

  • 听起来您的系统可能没有使用, 作为字段分隔符。你可以试试Export-Csv -Path "C:\Users\User\Desktop\SharePoint_Sites_List.csv" -NoTypeInformation -UseCulture
  • 是的,我忘了说我来自意大利,所以分隔符和符号与美国的不同。

标签: powershell csv sharepoint foreach sharepoint-online


【解决方案1】:

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

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 中的过滤就太排斥了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多