使用\\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
逗号是白色和文本,但如果我将配置文件名称放在纯文本中,则逗号为灰色...
答案 0 :(得分:1)
此处的问题似乎是您使用[string]
变量且值为Tom,Dick,Harry
。
我打赌你没有这样的文件夹,对吗?
虽然您可以将[string]
传递给-Exclude
参数;这将是一个单身人士(一个单一的标量值);你得到的最好的是单排除。
你真正想要传递的是一个字符串数组:[string[]]
!
[string]$excludedString = "Tom,Dick,Harry"
[string[]]$excludedArray = $excludedString -split ","
Get-ChildItem -Path "C:\users" -Exclude $excludedArray
答案 1 :(得分:0)
过度使用Out-File
是不必要的,因为它会将对象更改为字符串,从而导致问题。然后,您必须使用Split
和Join
之类的命令将字符串转换回您需要的对象(此处为数组)。
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
代码。