PowerShell,提取具有所有者和用户的SharePoint网站列表,并生成CSV
我正在尝试编写PowerShell脚本,以完成以下任务并获得部分结果:PowerShell,提取具有所有者和用户的SharePoint网站列表,并生成CSV,powershell,csv,sharepoint,foreach,sharepoint-online,Powershell,Csv,Sharepoint,Foreach,Sharepoint Online,我正在尝试编写PowerShell脚本,以完成以下任务并获得部分结果: 检索url中包含特定单词的SharePoint网站(包括OneDrive网站)列表(完成) 使用ForEach对象检索每个站点的所有者和用户列表(完成) 在CSV文件中导出这些信息(部分完成) 我的问题是第3列,我试图用一列显示站点URL,一列显示所有者,第三列显示所有用户, 但不幸的是,我只能在用户列表中创建csv,以下是将我带到这一点的代码: 结果是一个CSV文件,其中单元A1中有LoginName、“UserTyp
结果是一个CSV文件,其中单元A1中有LoginName、“UserType”,其他行中有相关信息
我正在努力实现的目标: 网站URL的第一列, 第二栏为场地所有者, 第三栏是每个网站的所有用户
我知道我遗漏了很多东西,但我不是一个开发者:), 这些是我用来编写代码的一些链接 我应该找什么?我在寻找一些提示,甚至是一些代码,
谢谢我预测你会遇到这种结构带来的麻烦:
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
中筛选的内容太排他了
如果仍然卡住,发布更新。听起来您的系统可能没有使用
,
作为字段分隔符。您可以尝试导出Csv路径“C:\Users\User\Desktop\SharePoint\u Sites\u List.Csv”-NoTypeInformation-UseCulture。是的,我忘了提到我来自意大利,所以分隔符和符号与美国的不一样。
$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