foreach 语句中的 Out-File

Out-File inside a foreach statement

我正在尝试 运行 这个脚本,它可以工作,但每次它从列表中的项目更改时,它都会删除文件并重新开始。 我需要做的是从所有用户的项目列表中获取并将它们全部放在一个文本文件中。

$sitios = Get-Content -Path C:\sitios.txt
Connect-SPOService -Url https://aaa.sharepoint.com/ -Credential Admin@aaa.onmicrosoft.com
foreach ($sitio in $sitios){
$sitio
Get-SPOUser -Site $sitio -Limit ALL | Out-File -FilePath C:\usuarios.txt
}

感谢任何帮助

可以使用Out-File-Append开关,但您所要做的就是将其移出循环。

(foreach ($sitio in $sitios){

    Write-Host $sitio
    Get-SPOUser -Site $sitio -Limit ALL 

}) | Out-File -FilePath C:\usuarios.txt

这样所有输出都将发送到 Out-File。我添加了 Write-Host $sitio 这样它就不会出现在文件中。您还可以使用 Set-Content,它被认为是 Out-File

的优先选择

循环周围需要括号,以便我们可以使用管道输出。 foreach 构造不能直接从中传输数据。一个答案here涵盖了原因。

综上所述,您可以做这样的事情

$sitios | ForEach-Object{
    Write-Host $_
    Get-SPOUser -Site $_ -Limit ALL 
} | Set-Content C:\usuarios.txt

此输出应该是一个复杂的对象,可能没有适当的 tostring 等价物。您仍然可以使用类似的方法获取所有数据。

$sitios | ForEach-Object{
    Write-Host $_
    Get-SPOUser -Site $_ -Limit ALL 
} | Export-CSV C:\usuarios.txt -NoTypeInformation

您可以使用添加内容 Cmdlet:

https://technet.microsoft.com/en-us/library/ee156791.aspx

而不是 Out-File 使用 Add-Content

如:

[...] | Add-Content C:\usuarios.txt