从win32_userprofile localpath

时间:2018-08-30 18:45:57

标签: powershell-v4.0

好吧,我正在尝试仅从以下命令的localpath属性中拉出用户名:

(Get-WmiObject -ComputerName $ComputerName -Class win32_UserProfile -Filter "localPath like 'c:\\Users\\%'" | sort localpath).localpath.replace('C:\Users\','')

这将替换我不需要的c:\ Users \。但是,在某些名称的末尾有.000或域名。对于我的一生,我不记得如何删除角色后的所有项目。如果您知道更好的方法,请告诉我。

输出:

sfricks
sguess.001
sholcombe
srabanal.000
srainey.OPR.000
ssanders
sspecht.OPR

我可以使用split选项,但是它将代码从一行代码带到3 +。

$Return = @()
$usernames = (Get-WmiObject -ComputerName $ComputerName -Class win32_UserProfile -Filter "localPath like 'c:\\Users\\%'" -ErrorAction Stop | sort localpath).localpath.replace('C:\Users\','')
foreach ($user in $usernames) {
    $Return += $user.Split('.')[0]
}
$Return

我正在尝试使用-replace找到解决方法。我不太确定该怎么做。只需要有人指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

在需要捕获变量文本进行替换的地方,最好使用正则表达式和-replace运算符而不是.replace()方法。为了您的目的,在完成.replace('C:\Users\','')之后,请使用-replace '\..*$',''。表达式的分解如下:

\.     - Literal dot. The . is normally a special character meaning 'match anything';
         the \ escapes it and removes the special meaning.
  .*   - Match any number of any character. The dot takes on its special character
         meaning here, and the star says 'any number of the previous character'
    $  - End of string.

https://www.debuggex.com/cheatsheet/regex/pcre上有一个很好的正则表达式备忘单