Можете ли вы использовать% username% в пути к каталогу при поиске файлов? - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь найти файлы, но я пытаюсь ограничить количество файлов, к которым я должен прикасаться при поиске, потому что то, что я ищу, находится в определенной подпапке.Однако вложенная папка вложена в папки пользователей на серверах

Я пытался использовать Get-childitem \ server \% username% \ desktop \ -filter file.ini

Get-ChildItem-path \ server \% username% \ desktop \ -filter file.ini

взрывается при имени пользователя.Мне не нужно искать все вышеупомянутые папки, только определенную подпапку, но я не могу обойти переменную пользователя.

Ответы [ 4 ]

1 голос
/ 14 мая 2019

Попробуйте использовать $env:username вместо %username%:

Get-childitem \server\$env:username\desktop\ -filter file.ini
Get-ChildItem -path \server\$env:username\desktop\ -filter file.ini
0 голосов
/ 15 мая 2019

Итак, я должен был проявить немного творчества.

$ путь = \ сервер \ firstlvl \

'# это дает мне имена именованных подпапок

$ getUserDirectory = Get-Childitem -path $ path

foreach ($ f в $ getUserDirectory) {

$ getMyFile = Get-ChildItem -path $ path $ f \ Data -recurse -filter notes.ini

}

Это приведет меня в каталог, чтобы я мог начать поиск файла и впоследствии проверить его содержимое на предмет того, что мне нужно найти.

0 голосов
/ 14 мая 2019

Для таких мест, как рабочий стол (так называемые «специальные папки»), альтернативным методом является использование .NET, чтобы найти место для вас.Например:

$desktop = [Environment]::GetFolderPath("Desktop")

Что будет возвращать что-то вроде этого:

C:\Users\<UserName>\Desktop

Преимущество в том, что вам не нужно знатьлюбая часть пути уже (например, буква диска), просто конкретная папка, которую вы хотите.Недостатком является то, что он работает только локально, поэтому вы не можете указать его на удаленный сервер и получить значение от их (хотя это должно работать через PowerShell Remoting).

Вот список всех возможныхзначения, которые вы можете использовать вместо «Рабочий стол»:

Environment.SpecialFolder Enum

Или вы можете получить их программно:

[Enum]::GetNames([Environment+SpecialFolder])

AdminTools
ApplicationData
CDBurning
CommonAdminTools
CommonApplicationData
CommonDesktopDirectory
CommonDocuments
CommonMusic
CommonOemLinks
CommonPictures
CommonProgramFiles
.
.
.
0 голосов
/ 14 мая 2019

PowerShell обрабатывает переменные среды несколько иначе, чем командные файлы.Вместо %username% вместо этого вы будете ссылаться на $env:username.

Get-ChildItem "\server\$env:username\desktop\" -filter 'file.ini'

Обратите внимание, что поиск будет выполняться только на текущем диске с папкой «server», находящейся в корне диска, так что есливаш диск, на котором вы работаете, является диском C: он будет проверять только этот путь:

C:\server\<username>\desktop\file.ini

Возможно, вы захотите добавить переключатель -recurse, чтобы он проверял подпапки, или предпринять действия для изменения.путь по мере необходимости.Если вы намеревались найти файл на удаленном сервере, возможно, вы хотели сделать это:

Get-ChildItem "\\server\c$\users\$env:username\desktop\" -filter 'file.ini'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...