Код, который вы разместили, совершенно не работает.Пожалуйста, найдите руководство по PowerShell, прежде чем продолжить.
Set-Location
не производит вывод, и даже если бы он это сделал, передача вывода командлета в строку вообще ничего не сделает. - Вы не должны переносить операторы в произвольных местах, как в примере кода.
- Обернутая строка пути реестра сохранит встроенную новую строку (таким образом, не соответствует тому, что вы хотите, чтобы она соответствовала).
- Помещение аргумента оператора
Select-Object
в следующую строку без экранированияnewline будет запускать Select-Object
без аргументов и аргументов как отдельный оператор (что, скорее всего, приведет к ошибке, поскольку аргументы сами по себе не являются допустимым оператором).
=
является оператором присваивания в PowerShell. Сравнение операторы: -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}*" }