如何使用通配符过滤 ProfileList
How to filter ProfileList with wildcards
我正在编写一个脚本来帮助简化 Citrix 服务器上用户配置文件列表的删除。我不知道如何通过通配符过滤 ProfileImagePath。
在我们的 Windows 2008 服务器的 Regedit 中,我可以通过其 Profileimagepath 搜索和排序用户的配置文件列表,但这会吸引所有用户,我似乎无法扩展该过滤器以仅带回通配符条目。
set-location | 'HKLM:\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\ProfileList' |% {Get-ItemProperty $_.pspath } | Select
profileImagePath=username*
我得到的是整个用户配置文件列表,或者如果我输入过滤器 =username* 条目,我会得到一个错误,我想要得到的只是通配符的结果,理想情况下只是我的用户名放在通配符中的是我想要返回的内容。
您发布的代码已完全损坏。请先查找 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}*" }
我正在编写一个脚本来帮助简化 Citrix 服务器上用户配置文件列表的删除。我不知道如何通过通配符过滤 ProfileImagePath。
在我们的 Windows 2008 服务器的 Regedit 中,我可以通过其 Profileimagepath 搜索和排序用户的配置文件列表,但这会吸引所有用户,我似乎无法扩展该过滤器以仅带回通配符条目。
set-location | 'HKLM:\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\ProfileList' |% {Get-ItemProperty $_.pspath } | Select
profileImagePath=username*
我得到的是整个用户配置文件列表,或者如果我输入过滤器 =username* 条目,我会得到一个错误,我想要得到的只是通配符的结果,理想情况下只是我的用户名放在通配符中的是我想要返回的内容。
您发布的代码已完全损坏。请先查找 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}*" }