我正在编写一个脚本来帮助简化Citrix服务器上用户配置文件列表的删除。我不知道如何通过通配符过滤ProfileImagePath。
在Regedit的Windows 2008服务器上,我可以搜索用户的配置文件列表并通过其Profileimagepath对其进行排序,但这可以吸引所有用户,我似乎无法扩展该过滤器,只返回通配符条目。
set-location | 'HKLM:\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\ProfileList' |% {Get-ItemProperty $_.pspath } | Select
profileImagePath=username*
我得到的是用户配置文件的整个列表,或者如果我输入filter = username *条目,则会出现错误,我想要得到的只是通配符的结果,理想情况下只是我输入的用户名通配符是我想要返回的。
答案 0 :(得分:0)
您发布的代码完全损坏。在继续进行任何操作之前,请先找到PowerShell教程。
Set-Location
不会产生输出,即使产生输出,将cmdlet输出管道到字符串中也不会执行任何操作。Select-Object
语句的参数放在下一行而不转义换行符将在没有参数的情况下运行Select-Object
并将参数作为单独的语句运行(这很可能会引发错误,因为参数不是本身不是有效的声明。=
是PowerShell中的 assignment 运算符。 比较运算符是-eq
(等于),-like
(通配符匹配)和-match
(正则表达式匹配)。Where-Object
来过滤流水线对象,而不是Select-Object
。后者用于选择对象 properties 。您可能打算这样做:
$username = '...'
$profilePath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
Get-ChildItem $profilePath | Where-Object {
(Get-ItemProperty $_.PSPath).ProfileImagePath -like "*${username}*"
}
或(简单)如下:
$username = '...'
$profilePath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
Get-ChildItem $profilePath |
Get-ItemProperty |
Where-Object { $_.ProfileImagePath -like "*${username}*" }