使用Get-ChildItem排除文件夹-Exclude

时间:2018-04-26 06:18:49

标签: powershell get-childitem

使用\\Computer\c$\Users时,我需要从Get-ChildItem文件夹中排除用户个人资料。

我可能需要从各种机器中排除100个配置文件,因此创建了一个变量,其中包含我想要排除的AD安全组中的所有用户配置文件,但是当我运行以下命令时它不起作用但是如果我列出的话纯文本中的配置文件确实有效。

Get-ChildItem "\\$computer\c$\Users" -Exclude $ListOfUsers

但如果我运行Get-ChildItem "\\$computer\c$\Users" -Exclude Bob1,Bob2,Bob3,Bob4,Bob5

,则有效

我从AD安全组获取用户的代码如下,其输出的格式与上面的逗号相同。

## collects users from groups and adds to exlusion list.
$1stline =   Get-ADGroupMember GG_1st_Line_Team | Select SamAccountName
$2ndline =   Get-ADGroupMember GG_2nd_Line_Team | Select SamAccountName
$3rdline =   Get-ADGroupMember GG_3rd_Line_Team | Select SamAccountName
$FieldTech = Get-ADGroupMember  "Field tech" | select SamAccountname
$Excluded = $1stline + $2ndline + $3rdline + $Fieldtech | Out-File "C:\temp\Members.txt"
(get-content c:\temp\Members.txt) -join "," | out-file C:\temp\Format.txt
$format = get-content c:\temp\format.txt; $format = $format -replace '\s',''; $format = $format -replace ',SamAccountName,--------------,',''; $format = $format.trimend(",,") | Out-File "C:\temp\newFormat.txt"
$excluded = Get-Content C:\Temp\newFormat.txt

这将创建一个包含100个名称且没有空格的文本文件,只有逗号分隔用户。如果我Write-Host变量$newformat逗号是白色和文本,但如果我将配置文件名称放在纯文本中,则逗号为灰色...

2 个答案:

答案 0 :(得分:1)

此处的问题似乎是您使用[string]变量且值为Tom,Dick,Harry

我打赌你没有这样的文件夹,对吗?

Tom,Dick,Harry Folder

虽然您可以将[string]传递给-Exclude参数;这将是一个单身人士(一个单一的标量值);你得到的最好的是排除。

你真正想要传递的是一个字符串数组:[string[]]

[string]$excludedString = "Tom,Dick,Harry"
[string[]]$excludedArray = $excludedString -split ","
Get-ChildItem -Path "C:\users" -Exclude $excludedArray

答案 1 :(得分:0)

过度使用Out-File是不必要的,因为它会将对象更改为字符串,从而导致问题。然后,您必须使用SplitJoin之类的命令将字符串转换回您需要的对象(此处为数组)。

仅当您确实需要输出作为文件时,才应使用

Out-File

通过对您的脚本进行一些简单的更改,它可以做您想做的事情,并且也会更加简单!

您可以使用ExpandProperty仅将SamAccountName本身的值作为字符串而不是对象返回。

然后,您可以简单地创建这些字符串的数组,并使用它来从Get-ChildItem中排除这些帐户/文件夹,

$1stline =   Get-ADGroupMember GG_1st_Line_Team | Select-Object -ExpandProperty SamAccountName
$2ndline =   Get-ADGroupMember GG_2nd_Line_Team | Select-Object -ExpandProperty SamAccountName
$3rdline =   Get-ADGroupMember GG_3rd_Line_Team | Select-Object -ExpandProperty SamAccountName
$FieldTech = Get-ADGroupMember  "Field tech" | Select-Object -ExpandProperty SamAccountname

$excluded = $1stline,$2ndline,$3rdline,$Fieldtech

Get-ChildItem "\\$computer\c$\Users" -Exclude $excluded

然后,您可以考虑使用foreach循环Get-ADGroupMember来减少重复的Get-ADGroupMember代码。