2

我想在特定位置压缩目录。源路径是: \\$Computers\Users\$Names

我想要比每台计算机在每台计算机的源路径中的每个用户目录的副本

我尝试使用foreach如下循环:

$Computers = Get-ADComputer -Filter "Name -like 'PC*'" | Select-Object -ExpandProperty Name
$Names = Get-aduser -filter * | Select-Object -ExpandProperty givenname 

Foreach($Computer in $Computers)
{
    Compress-Archive -Path \\$Computer\Users\* -DestinationPath C:\Saves\\$Computer\Test.zip -Force
}

这实际上有效,但我不知道如何在循环中添加第二个循环。

如果有人可以向我解释该功能或只是一些建议,请尝试这样做。

感谢您的时间。

4

1 回答 1

2

您正在使用错误的逻辑解决问题,您确实需要一个内部循环,但是,与其尝试压缩您不确定是否存在的用户配置文件,不如查询远程计算机的用户文件夹以查看哪个那些在那里并且只压缩那些:

$Computers = (Get-ADComputer -Filter "Name -like 'PC*'").Name
# Add the profiles you want to exclude here:
$toExclude = 'Administrator', 'Public'
$params = @{
    Force = $true
    CompressionLevel = 'Optimal'
}

foreach($Computer in $Computers)
{
    $source = "\\$Computer\Users"
    Get-ChildItem $source -Exclude $toExclude -Directory | ForEach-Object {
        $params.LiteralPath = $_.FullName
        # Name of the zipped file would be "ComputerExample - UserExample.zip"
        $params.DestinationPath = "C:\Saves\$computer - {0}.zip" -f $_.Name
        Compress-Archive @params
    }
}
于 2022-02-06T21:29:50.367 回答