使用 Get-ChildItem -Exclude 排除文件夹
Excluding folders using Get-ChildItem -Exclude
我需要在使用 Get-ChildItem
时从 \Computer\c$\Users
文件夹中排除用户配置文件。
我可能需要从各种机器中排除 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.
stline = Get-ADGroupMember GG_1st_Line_Team | Select SamAccountName
ndline = Get-ADGroupMember GG_2nd_Line_Team | Select SamAccountName
rdline = Get-ADGroupMember GG_3rd_Line_Team | Select SamAccountName
$FieldTech = Get-ADGroupMember "Field tech" | select SamAccountname
$Excluded = stline + ndline + rdline + $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
逗号和文本一起是白色的,但是如果我将配置文件名称放在纯文本中,那么逗号是灰色的...
这里的问题似乎是您使用的 [string]
变量的值为 Tom,Dick,Harry
.
我打赌你没有这样的文件夹,是吗?
虽然您可以将 [string]
传递给 -Exclude
参数;那将是一个单身人士(一个单一的标量值);最好的结果是 单一 排除。
你真正要传入的是一个字符串数组:[string[]]
!
[string]$excludedString = "Tom,Dick,Harry"
[string[]]$excludedArray = $excludedString -split ","
Get-ChildItem -Path "C:\users" -Exclude $excludedArray
过度使用 Out-File
是不必要的,并且会导致您在将对象更改为字符串时出现问题。然后,您必须使用 Split
和 Join
之类的命令将字符串转回您需要的对象(此处为数组)。
Out-File
只应在您实际需要将输出 作为文件.
时使用
只需对您的脚本进行一些简单的更改,它就会执行您想要的操作,而且会简单很多!
您可以使用 ExpandProperty
仅 return SamAccountName
本身的值作为字符串而不是对象。
然后您可以简单地创建这些字符串的数组,并使用它从 Get-ChildItem
、
中排除那些 accounts/folders
stline = Get-ADGroupMember GG_1st_Line_Team | Select-Object -ExpandProperty SamAccountName
ndline = Get-ADGroupMember GG_2nd_Line_Team | Select-Object -ExpandProperty SamAccountName
rdline = Get-ADGroupMember GG_3rd_Line_Team | Select-Object -ExpandProperty SamAccountName
$FieldTech = Get-ADGroupMember "Field tech" | Select-Object -ExpandProperty SamAccountname
$excluded = stline,ndline,rdline,$Fieldtech
Get-ChildItem "\$computer\c$\Users" -Exclude $excluded
然后您可以考虑使用 foreach
循环和 Get-ADGroupMember
来减少重复的 Get-ADGroupMember
代码。
我需要在使用 Get-ChildItem
时从 \Computer\c$\Users
文件夹中排除用户配置文件。
我可能需要从各种机器中排除 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.
stline = Get-ADGroupMember GG_1st_Line_Team | Select SamAccountName
ndline = Get-ADGroupMember GG_2nd_Line_Team | Select SamAccountName
rdline = Get-ADGroupMember GG_3rd_Line_Team | Select SamAccountName
$FieldTech = Get-ADGroupMember "Field tech" | select SamAccountname
$Excluded = stline + ndline + rdline + $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
逗号和文本一起是白色的,但是如果我将配置文件名称放在纯文本中,那么逗号是灰色的...
这里的问题似乎是您使用的 [string]
变量的值为 Tom,Dick,Harry
.
我打赌你没有这样的文件夹,是吗?
虽然您可以将 [string]
传递给 -Exclude
参数;那将是一个单身人士(一个单一的标量值);最好的结果是 单一 排除。
你真正要传入的是一个字符串数组:[string[]]
!
[string]$excludedString = "Tom,Dick,Harry"
[string[]]$excludedArray = $excludedString -split ","
Get-ChildItem -Path "C:\users" -Exclude $excludedArray
过度使用 Out-File
是不必要的,并且会导致您在将对象更改为字符串时出现问题。然后,您必须使用 Split
和 Join
之类的命令将字符串转回您需要的对象(此处为数组)。
Out-File
只应在您实际需要将输出 作为文件.
只需对您的脚本进行一些简单的更改,它就会执行您想要的操作,而且会简单很多!
您可以使用 ExpandProperty
仅 return SamAccountName
本身的值作为字符串而不是对象。
然后您可以简单地创建这些字符串的数组,并使用它从 Get-ChildItem
、
stline = Get-ADGroupMember GG_1st_Line_Team | Select-Object -ExpandProperty SamAccountName
ndline = Get-ADGroupMember GG_2nd_Line_Team | Select-Object -ExpandProperty SamAccountName
rdline = Get-ADGroupMember GG_3rd_Line_Team | Select-Object -ExpandProperty SamAccountName
$FieldTech = Get-ADGroupMember "Field tech" | Select-Object -ExpandProperty SamAccountname
$excluded = stline,ndline,rdline,$Fieldtech
Get-ChildItem "\$computer\c$\Users" -Exclude $excluded
然后您可以考虑使用 foreach
循环和 Get-ADGroupMember
来减少重复的 Get-ADGroupMember
代码。