我们有一个问题,即通过intune的标准windows配置文件删除方法无法正常工作,通常会在C\Users中留下孤立的用户目录,这会使C:驱动
我想写一个PS脚本:
- 获取用户配置文件(普通用户)
- 获取C:\Users中的(普通)用户目录
- 确定哪些目录不对应于用户配置文件
- 删除这些目录
我是PS新手)
# Get user directories
[string[]]$Directories = Get-ChildItem C:\users |
Where-Object {$_.PSIsContainer -and $_ -notlike "*Windows*" -and $_ -notlike "*default*" -and $_ -notlike "*Public*" -and $_ -notlike "*Admin*"} |
Foreach-Object {$_.Name}
# Get user profiles
[string[]]$Profiles = Get-CimInstance -ClassName Win32_UserProfile -Filter "Special = 'False'" | Select-Object LocalPath | Out-String
#Iterate
Foreach($Directory in $Directories) {
if(("C:\users\" + $Directory) -notin $Profiles){
## complete some task
}
}
我发现我错过了一些基本的东西。的迭代。如果我注解掉if
循环add write-host $Directory
,它将列出目录,但只有第一个目录前面有C:\Users\。
我还假设我构造的数组不正确,尽管它们看起来是字符串数组?
如果工作正常,在C:\Users\中创建一个空文件夹“Test”,并在if
循环中添加write-host $Directory
,应该只会输出“Test”。
提前感谢:)
1条答案
按热度按时间h7appiyu1#
PowerShell作为一种语言,与许多语言不同,它是一种动态类型语言。也就是说,不需要为返回的输出进行 * 类型转换 ( 在大多数情况下 *)。
也就是说,当你可以直接使用属性时,你也不必对它的任何输出进行字符串化(via
Out-String
):你必须注意 grouping 操作符
(...)
,当它应用于集合时,它允许直接访问集合中项目的属性。如果您有一个对象数组,并且使用分组运算符后跟属性名称(如LocalPath
或FullName
),PowerShell将为集合中的每个对象返回该属性的值。也称为Member-Access Enumeration。