好吧,我正在尝试仅从以下命令的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找到解决方法。我不太确定该怎么做。只需要有人指出我正确的方向。
答案 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上有一个很好的正则表达式备忘单