Powershell out username из win32_userprofile localpath - PullRequest
0 голосов
/ 30 августа 2018

Хорошо, я пытаюсь извлечь только имя пользователя из свойств 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 голосов
/ 30 августа 2018

Если вам нужно перехватить переменный текст для замены, вам, вероятно, лучше использовать регулярные выражения и оператор -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

...