【问题标题】:How to filter ProfileList with wildcards如何使用通配符过滤 ProfileList
【发布时间】:2018-12-31 10:48:21
【问题描述】:

我正在编写一个脚本来帮助简化在我们的 Citrix 服务器上删除用户配置文件列表的过程。我不知道如何通过通配符过滤 ProfileImagePath。

在我们的 Windows 2008 服务器上,我可以通过其 Profileimagepath 搜索和排序用户的配置文件列表,但这会获取所有用户,我似乎无法扩展该过滤器以仅带回通配符条目。

set-location | 'HKLM:\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\ProfileList' |% {Get-ItemProperty $_.pspath } | Select 
profileImagePath=username*

我得到的是用户配置文件的整个列表,或者如果我输入过滤器 =username* 条目我得到一个错误,我想要得到的只是通配符的结果,理想情况下只是我输入的用户名通配符是我想要返回的。

【问题讨论】:

  • 正如 AnsgarWiechers 指出的那样,您的代码被严重破坏,以至于我无法想象您是如何获得任何输出的。 [grin] ///// 这是获取本地用户配置文件路径的另一种方法,它比使用注册表更容易...(Get-CimInstance -ClassName Win32_UserProfile).LocalPath -like '*[1st2LetersOfMyUserName]*' --- 它提供了我的用户配置文件路径。
  • 嘿@Lee_Dailey 是的,我实际上分多个步骤完成了代码,所以我首先设置位置然后运行它,然后运行 ​​get-childlocation,现在我无法让我的代码在它显示的地方工作通过配置文件名称的文件夹。
  • 您需要在运行时发布完整代码,以获得有关该代码的帮助。你发布的东西是行不通的。 [grin] ///// 你试过Get-CimInstance 的东西吗?它返回一个更“标准powershell”的对象 - 通常更容易使用。另外,它有一个.Delete() 方法...
  • 不,我没有尝试过,但是 Ansgar 的脚本有效,给了我我想要的,我将不得不研究如何在它的末尾通过管道删除,所以它只是删除了那个一位用户。我的 PS 甚至没有在这台服务器上为 Get-CimInstance 提取 get-help,所以我不知道我是否可以让它工作,因为它不会运行更新。
  • 啊!如果由于某种原因无法更新,您的服务器可能正在运行 psv2。在这种情况下,您应该能够使用Get-WmiObject 而不是新的CIM-* cmdlet。无论如何,你有它工作,这才是最重要的! [咧嘴]

标签: powershell regedit registrykey


【解决方案1】:

您发布的代码已完全损坏。在继续之前,请先查找 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}*" }

【讨论】:

  • 感谢 Ansgar,我正在为初学者使用 powershell 中的 MVA,并且知道我通过尝试执行此任务已经咬了不少东西,所以我很感激你仍然花时间写回一个回应。
猜你喜欢
  • 2021-09-03
  • 2017-09-09
  • 2015-04-16
  • 1970-01-01
  • 2015-08-28
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多