Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Навигация по дискам PowerShell и управление элементами на них аналогична обработке файлов и папок на дисках Windows. В этой статье описывается, как работать с определенными задачами обработки файлов и папок с помощью PowerShell.
Перечисление всех файлов и папок в папке
Все элементы можно получить непосредственно в папке с помощью Get-ChildItem
. Добавьте необязательный параметр Force для отображения скрытых или системных элементов. Например, эта команда отображает прямое содержимое диска PowerShell C:
.
Get-ChildItem -Path C:\ -Force
Команда перечисляет только непосредственно содержащиеся элементы, подобно использованию команды dir
в cmd.exe
или ls
в оболочке Unix. Чтобы отобразить элементы в вложенной папке, необходимо указать параметр Recurse.
Следующая команда содержит список всех элементов на диске C:
:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem
может фильтровать элементы с помощью пути, фильтра, включитьи исключить параметры, но они обычно основаны только на имени. Вы можете выполнять сложную фильтрацию на основе других свойств элементов с помощью Where-Object
.
Следующая команда находит все исполняемые файлы в папке Program Files, которые были изменены после 1 октября 2005 года, и они не меньше 1 мегабайт или больше 10 мегабайт:
Get-ChildItem -Path $Env:ProgramFiles -Recurse -Include *.exe |
Where-Object -FilterScript {
($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
}
Копирование файлов и папок
Копирование выполняется с помощью Copy-Item
. Следующая команда создает резервную копию скрипта профиля PowerShell:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}
Команда Test-Path
проверяет, существует ли скрипт профиля.
Если целевой файл уже существует, попытка копирования завершается ошибкой. Чтобы перезаписать уже существующее местоположение, используйте параметр Force.
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}
Эта команда работает даже в том случае, если назначение доступно только для чтения.
Копирование папок работает так же. Эта команда копирует папку C:\temp\test1
в новую папку C:\temp\DeleteMe
рекурсивно:
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Вы также можете скопировать выбор элементов. Следующая команда копирует все файлы .txt
, содержащиеся в любом месте C:\data
, в C:\temp\text
:
Copy-Item -Filter *.txt -Path C:\data -Recurse -Destination C:\temp\text
Вы по-прежнему можете выполнять собственные команды, такие как xcopy.exe
и robocopy.exe
для копирования файлов.
Создание файлов и папок
Создание новых элементов работает одинаково для всех поставщиков PowerShell. Если поставщик PowerShell имеет несколько типов элементов, например поставщик FileSystem PowerShell различает каталоги и файлы, необходимо указать тип элемента.
Эта команда создает новую папку C:\temp\New Folder
:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
Эта команда создает пустой файл C:\temp\New Folder\file.txt
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Это важно
При использовании переключателя принудительно с командой New-Item
для создания папки, если папка уже существует, она не будет перезаписана или заменена. Он просто вернет существующий объект папки. Однако если вы используете New-Item -Force
в файле, который уже существует, файл перезаписывается.
Удаление всех файлов и папок в папке
Вы можете удалить содержащиеся элементы с помощью Remove-Item
, но вам будет предложено подтвердить удаление, если элемент содержит что-либо другое. Например, если вы пытаетесь удалить папку C:\temp\DeleteMe
, которая содержит другие элементы, PowerShell запрашивает подтверждение перед удалением папки:
Remove-Item -Path C:\temp\DeleteMe
Confirm
The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):
Если вы не хотите, чтобы вас запрашивали по каждому содержащемуся элементу, укажите параметр Recurse.
Remove-Item -Path C:\temp\DeleteMe -Recurse
Сопоставление локальной папки как диска
Вы также можете связать локальную папку с помощью команды New-PSDrive
. Следующая команда создает локальный диск P:
с корнем в местном каталоге Program Files, который виден только в сеансе PowerShell.
New-PSDrive -Name P -Root $Env:ProgramFiles -PSProvider FileSystem
Как и при использовании сетевых дисков, диски, сопоставленные в PowerShell, сразу же видны оболочке PowerShell. Чтобы создать сопоставленный диск, видимый из проводника, используйте параметр Сохранить. Однако с Persistможно использовать только удаленные пути.
Чтение текстового файла в массив
Одним из наиболее распространенных форматов хранения текстовых данных является файл с отдельными строками, которые рассматриваются как отдельные элементы данных. Командлет Get-Content
можно использовать для чтения всего файла на одном шаге, как показано ниже.
Get-Content -Path $PROFILE
# Load modules and change to the PowerShell-Docs repository folder
Import-Module posh-git
Set-Location C:\Git\PowerShell-Docs
Get-Content
обрабатывает данные, считанные из файла как массив, с одним элементом на строку содержимого файла. Чтобы подтвердить это, проверьте длину возвращаемого содержимого:
PS> (Get-Content -Path $PROFILE).Length
3
Эта команда наиболее полезна для получения списков сведений в PowerShell. Например, можно сохранить список имен компьютеров или IP-адресов в файле C:\temp\domainMembers.txt
с одним именем в каждой строке файла. Вы можете использовать Get-Content
для получения содержимого файла и их вставки в переменную $Computers
:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers
теперь представляет собой массив, содержащий имя компьютера в каждом элементе.
PowerShell