Powershell работа с файлами: Работа с файлами и папками — PowerShell
Содержание
Работа с файлами и папками — PowerShell
-
Статья -
- Чтение занимает 4 мин
-
Просмотр содержимого дисков Windows PowerShell и управление хранящимися на них элементами аналогично управлению файлами и папками на физических дисках Windows. В этой статье описывается выполнение конкретных задач по управлению файлами и папками с помощью PowerShell.
Получение списка файлов и папок, содержащихся в папке
Извлечь все элементы непосредственно из папки можно с помощью командлета Get-ChildItem
. Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает непосредственное содержимое диска C Windows PowerShell (которое совпадает с содержимым физического диска C Windows):
Get-ChildItem -Path C:\ -Force
Эта команда выводит только элементы, содержащиеся на диске непосредственно, так же как и команда DIR
оболочки Cmd.exe
или команда ls
оболочки UNIX. Для показа вложенных элементов необходимо также указать параметр -Recurse
. (Время выполнения этой операции будет очень велико.) Для вывода всего содержимого диска C введите:
Get-ChildItem -Path C:\ -Force -Recurse
Командлет Get-ChildItem
позволяет отфильтровать элементы с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Сложную фильтрацию на основе других свойств элементов можно выполнить с помощью Where-Object
.
Следующая команда находит все исполняемые файлы в папке Program Files, которые были в последний раз изменены после 1 октября 2005 г. и размер которых не менее одного мегабайта и не более десяти мегабайт:
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
. Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.
Copy-Item -Path C:\boot.ini -Destination C:\boot.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
Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла C:\boot.ini
в файле C:\boot.bak
:
(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak')
Создание файлов и папок
Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.
Эта команда создает папку 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
Важно!
При использовании параметра Force с командой New-Item
для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако, если использовать New-Item -Force
в уже имеющимся файле, файл будет полностью перезаписан.
Удаление всех файлов и папок, содержащихся в папке
Удалить вложенные элементы можно с помощью командлета Remove-Item
, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удаления папки C:\temp\DeleteMe
, которая содержит другие элементы, Windows PowerShell предварительно предложит подтвердить удаление этой папки:
Remove-Item -Path C:\temp\DeleteMe Confirm The item at C:\temp\DeleteMe has children and the Recurse parameter was not 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
Как и при использовании сетевых дисков, диски, отображенные в Windows PowerShell, немедленно становятся доступными оболочке Windows PowerShell. Чтобы создать подключенный диск, отображающийся в проводнике, нужен параметр -Persist
. Но с этим параметром можно использовать только удаленные пути.
Чтение текстового файла в массив
Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content
используется для чтения всего файла за один шаг, как показано далее:
PS> Get-Content -Path C:\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=AlwaysOff /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional with Data Execution Prevention" /noexecute=optin /fastdetect
Командлет Get-Content
сразу рассматривает данные, считанные из файла, как массив с одним элементом на строку содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:
PS> (Get-Content -Path C:\boot.ini).Length 6
Эта команда наиболее полезна для непосредственного ввода в Windows PowerShell информационных списков. Например, можно хранить в файле C:\temp\domainMembers.txt
список имен компьютеров или IP-адресов по одному имени на каждую строку файла. Вы можете использовать командлет Get-Content
, чтобы извлечь содержимое файла и поместить его в переменную $Computers
:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
Теперь переменная $Computers
представляет собой массив, содержащий в каждом элементе имя компьютера.
Работа с файлами, папками и разделами реестра — PowerShell
-
Статья -
- Чтение занимает 4 мин
-
Windows PowerShell использует существительное Item, чтобы ссылаться на элементы, найденные на диске Windows PowerShell.
При работе с поставщиком FileSystem Windows PowerShell Item может быть файлом, папкой или диском Windows PowerShell. Создание списков элементов и работа с ними является критически важной задачей в большинстве административных учреждений, поэтому необходимо подробно обсудить ее.
Так как получение коллекции элементов из определенного расположения является обычной задачей, командлет Get-ChildItem
предназначен специально для возврата всех элементов, найденных в контейнере, например в папке.
Если необходимо вернуть все файлы и папки, которые находятся непосредственно в папке C:\Windows, введите:
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-16 8:10 AM 0 0.log -a--- 2005-11-29 3:16 PM 97 acc1.txt -a--- 2005-10-23 11:21 PM 3848 actsetup. log ...
Списки выглядят аналогично тем спискам, которые появляются при вводе команды dir
в Cmd.exe или команды ls
в командной оболочке UNIX.
С помощью параметров командлета Get-ChildItem
можно создавать очень сложные списки. Далее рассмотрим несколько сценариев. Синтаксис командлета Get-ChildItem
можно увидеть, введя следующее.
Get-Command -Name Get-ChildItem -Syntax
Эти параметры можно скомбинировать и сопоставить для получения настраиваемых выходных данных.
Перечисление всех элементов в контейнере (-Recurse)
Чтобы увидеть оба элемента в папке Windows и все элементы во вложенных папках, используйте параметр Recurse для Get-ChildItem
. В списке отображается все, что находится в папке Windows, а также элементы в ее вложенных папках. Пример:
PS> Get-ChildItem -Path C:\WINDOWS -Recurse Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS Directory: Microsoft. Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll ...
Фильтрация элементов по имени (-Name)
Чтобы отобразить только имена элементов, используйте параметр Name для Get-Childitem
.
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly ...
Принудительное перечисление скрытых элементов (-Force)
В выходных данных команды Get-ChildItem
не отображаются элементы, которые обычно невидимы в проводнике или Cmd.exe. Чтобы показать скрытые элементы, используйте параметр Force для Get-ChildItem
.
Пример:
Get-ChildItem -Path C:\Windows -Force
Этот параметр называется Force, так как позволяет принудительно переопределить обычное поведение команды Get-ChildItem
. Параметр Force широко используется для принудительного выполнения действия командлетом. Тем не менее, он не будет выполнять действия, компрометирующие систему безопасности.
Сопоставление имен элементов с подстановочными знаками
Команда Get-ChildItem
принимает подстановочные знаки в пути к элементам списка.
Так как сопоставление с подстановочными знаками обрабатывается подсистемой Windows PowerShell, все командлеты, которые принимают подстановочные знаки, используют одну нотацию и имеют одно поведение сопоставления. В нотацию подстановочных знаков Windows PowerShell входит:
Звездочка (
*
) соответствует нулю или большему количеству вхождений любого символа.Знак вопроса (
?
) соответствует ровно одному символу.Открывающая квадратная скобка (
[
) и закрывающая квадратная скобка (]
) заключают в себя набор символов для сопоставления.
Далее приводится несколько примеров работы спецификации из подстановочных знаков.
Чтобы найти в каталоге Windows все файлы, имеющие суффикс . log
и ровно пять символов в основном имени, введите следующую команду.
PS> Get-ChildItem -Path C:\Windows\?????.log Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- ... -a--- 2006-05-11 6:31 PM 204276 ocgen.log -a--- 2006-05-11 6:31 PM 22365 ocmsn.log ... -a--- 2005-11-11 4:55 AM 64 setup.log -a--- 2005-12-15 2:24 PM 17719 VxSDM.log ...
Чтобы найти в каталоге Windows все файлы с именами, начинающимися на букву x
, введите следующее.
Get-ChildItem -Path C:\Windows\x*
Чтобы найти все файлы с именами, начинающимися на x или z, введите следующее.
Get-ChildItem -Path C:\Windows\[xz]*
Дополнительные сведения о подстановочных знаках см. в разделе about_Wildcards.
Исключение элементов (-Exclude)
Вы можете исключить определенные элементы с помощью параметра Exclude для Get-ChildItem
. Это позволит вам выполнить сложную фильтрацию в одном операторе.
Например, вы пытаетесь найти библиотеку службы времени Windows в папке System32 и все, что вам известно об имени библиотеки, — то, что оно начинается с W и содержит 32.
Такое выражение, как w*32*.dll
, найдет все библиотеки DLL, которые отвечают этим условиям, но вам может потребоваться дополнительно отфильтровать файлы и пропустить все файлы win32. Эти файлы можно пропустить с помощью параметра Exclude с шаблоном win*
.
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win* Directory: C:\WINDOWS\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 3/18/2019 9:43 PM 495616 w32time.dll -a--- 3/18/2019 9:44 PM 35328 w32topl.dll -a--- 1/24/2020 5:44 PM 401920 Wldap32.dll -a--- 10/10/2019 5:40 PM 442704 ws2_32. dll -a--- 3/18/2019 9:44 PM 66048 wsnmp32.dll -a--- 3/18/2019 9:44 PM 18944 wsock32.dll -a--- 3/18/2019 9:44 PM 64792 wtsapi32.dll
Смешение параметров Get-ChildItem
В одной команде можно использовать несколько параметров командлета Get-ChildItem
. Перед тем как комбинировать параметры, убедитесь, что понимаете принципы сопоставления подстановочных знаков. Например, следующая команда не возвращает результатов:
Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
Результаты отсутствуют, даже если существуют две библиотеки, которые начинаются на букву z в папке Windows.
Результаты не возвращены, так как подстановочный знак указан как часть пути. Хотя команда и была рекурсивной, командлет Get-ChildItem
ограничил элементы до тех, которые находятся в папке Windows с именами, заканчивающимися на .dll
.
Чтобы указать рекурсивный поиск для файлов, имена которых соответствуют специальному шаблону, используйте параметр Include.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 8261 zoneoc.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 337920 zipfldr.dll
Работа с файлами и папками — PowerShell
- Статья
- 4 минуты на чтение
Навигация по дискам Windows PowerShell и управление элементами на них аналогичны
управление файлами и папками на физических дисках Windows. В этой статье рассказывается, как бороться
с конкретными задачами по работе с файлами и папками с помощью PowerShell.
Список всех файлов и папок в папке
Вы можете получить все элементы непосредственно в папке, используя Get-ChildItem
. Добавьте необязательный
Принудительно параметр для отображения скрытых или системных элементов. Например, эта команда отображает прямой
содержимое диска Windows PowerShell C (это то же самое, что и физический диск Windows C):
Get-ChildItem -Path C:\ -Force
Команда выводит список только непосредственно содержащихся элементов, как при использовании Cmd.exe
‘s DIR
команда или
ls
в оболочке UNIX. Чтобы показать содержащиеся элементы, вам нужно указать -Recurse
также параметр. (Это может занять очень много времени.) Чтобы перечислить все на C
диск:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem
может фильтровать элементы с помощью Path , Filter , Include и Exclude
параметры, но они обычно основаны только на имени. Вы можете выполнять сложную фильтрацию на основе
другие свойства предметов с помощью Где-Объект
.
Следующая команда находит все исполняемые файлы в папке 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)}
Копирование файлов и папок
Копирование выполняется с помощью Копия-Элемент
. Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Если целевой файл уже существует, попытка копирования завершится неудачно. Чтобы перезаписать ранее существовавший
назначения, используйте параметр Force :
Copy-Item -Path C:\boot.ini -Destination C:\boot.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, ROBOCOPY и COM-объекты, такие как
как Scripting.FileSystemObject, все работают в Windows PowerShell. Например, вы можете использовать
Windows Script Host Scripting.FileSystem Класс COM для резервного копирования C:\boot.ini
на C:\boot.bak
:
(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\ boot.ini', 'C:\boot. bak')
Создание файлов и папок
Создание новых элементов одинаково работает во всех поставщиках Windows PowerShell. Если Windows PowerShell
поставщик имеет несколько типов элементов, например, поставщик файловой системы Windows 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
Важно
При использовании переключателя Force с командой New-Item
для создания папки и папки
уже существует, не будет перезаписать или заменить папку. Он просто вернет существующий
объект папки. Однако если вы используете New-Item -Force
для уже существующего файла, файл будет
быть полностью перезаписан.
Удаление всех файлов и папок в папке
Вы можете удалить содержащиеся элементы с помощью Remove-Item
, но вам будет предложено подтвердить
удаление, если элемент содержит что-либо еще. Например, если вы попытаетесь удалить папку
C:\temp\DeleteMe
, который содержит другие элементы, Windows PowerShell запрашивает подтверждение перед
удаление папки:
Remove-Item -Path C:\temp\DeleteMe Подтверждать Элемент в C:\temp\DeleteMe имеет дочерние элементы, и параметр Recurse не был указано. Если вы продолжите, все дочерние элементы будут удалены вместе с элементом. Ты уверены, что хотите продолжить? [Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"):
Если вы не хотите получать запросы для каждого содержащегося элемента, укажите Recurse параметр:
Remove-Item -Path C:\temp\DeleteMe -Recurse
Сопоставление локальной папки как диска
Вы также можете сопоставить локальную папку с помощью команды New-PSDrive
. Следующая команда создает
локальный диск P:
с корнем в локальном каталоге Program Files, видимый только из PowerShell
сеанс:
New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem
Как и в случае с сетевыми дисками, диски, подключенные в Windows PowerShell, сразу видны
Оболочка Windows PowerShell. Чтобы создать подключенный диск, видимый из Проводника,
параметр - Требуется сохранение
. Однако с Persist можно использовать только удаленные пути.
Чтение текстового файла в массив
Одним из наиболее распространенных форматов хранения текстовых данных является файл, в котором отдельные строки обрабатываются как
отдельные элементы данных. Командлет Get-Content
можно использовать для чтения всего файла за один шаг.
как показано здесь:
PS> Get-Content -Path C:\boot.ini [загрузчик] таймаут=5 по умолчанию = мульти (0) диск (0) rdisk (0) раздел (1) \ WINDOWS [операционные системы] многодисковый (0) диск (0) rdisk (0) раздел (1) \ WINDOWS = "Microsoft Windows XP Professional" /noexecute=Всегда выключено /fastdetect мульти(0)диск(0)rdisk(0)раздел(1)\WINDOWS=" Microsoft Windows XP Professional с предотвращением выполнения данных" /noexecute=optin /fastdetect
Get-Content
уже обрабатывает данные, считанные из файла, как массив с одним элементом на строку
содержимое файла. Вы можете подтвердить это, проверив Длина возвращаемого содержимого:
PS> (Get-Content -Path C:\boot.ini).Length 6
Эта команда наиболее полезна для прямого получения списков информации в Windows PowerShell. За
например, вы можете хранить список имен компьютеров или IP-адресов в файле
C:\temp\domainMembers.txt
с одним именем в каждой строке файла. Вы можете использовать Get-Content
для
получить содержимое файла и поместить его в переменную $Computers
:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers
теперь представляет собой массив, содержащий имя компьютера в каждом элементе.
Создание, удаление, копирование, переименование и перемещение файлов
Ежедневно системным администраторам приходится выполнять различные стандартные операции с многочисленными файлами и папками на своих серверах Windows. Эти задачи часто включают в себя управление данными пользователей на общих ресурсах и правильное поддержание резервных копий. Вы можете использовать PowerShell, чтобы уменьшить объем ручной работы.
Прежде чем начать, убедитесь, что ваша системная политика разрешает выполнение сценариев PowerShell, как описано в «Учебнике по написанию сценариев Windows PowerShell для начинающих».
Просмотр объектов в каталоге
Чтобы просмотреть содержимое каталога на файловом сервере Windows, используйте командлет Get-ChildItem. Чтобы показать все скрытые файлы, добавьте параметр -Force. Приведенная ниже команда показывает все корневые объекты в общей папке:
Get-ChildItem -Force \\fs\Shared
Если вы хотите также проверить все подпапки и их содержимое, добавьте параметр -Recurse:
Get-ChildItem -Force \\fs\Shared -Recurse
Чтобы отфильтровать вывод, добавьте параметры Filter, Exclude, Include и Path в командлет Get-ChildItem. Для расширенной фильтрации объектов используйте командлет Where-Object. Приведенный ниже сценарий ищет все исполняемые файлы в папке IT, которые были изменены после 1 апреля 2018 г. :
Get-ChildItem -Path \\fs\Shared\IT -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt '2018-04-01')}
Создание файлов и папок с помощью PowerShell
Чтобы создать новые объекты с помощью Windows PowerShell, вы можете использовать командлет New-Item и указать тип элемента, который вы хотите создать, например каталог, файл или раздел реестра.
Например, эта команда создает папку:
New-Item -Path '\\fs\Shared\NewFolder' -ItemType Directory
И эта команда создает пустой файл:
New-Item -Path '\\ fs\Shared\NewFolder\newfile.txt' -ItemType File
Создание файлов и запись в них данных
Существует как минимум два встроенных метода для создания файла и записи в него данных. Первый — использовать командлет Out-File:
$text = 'Hello World!' | Out-File $text -FilePath C:\data\text.txt
Чтобы перезаписать существующий файл, используйте параметр переключателя –Force.
Вы также можете создавать файлы с помощью командлета Export-Csv, который экспортирует выходные данные в файл csv, который можно открыть в Excel:
Get-ADuser -Filter * | Export-Csv -Путь C:\data\ADusers. csv
Создать файлы после проверки того, что они еще не существуют
Следующий сценарий проверяет, существует ли уже определенный файл (pc.txt) в определенной папке; если нет, он создает список всех компьютеров AD и сохраняет его в новый файл с именем pc.txt:
#создать массив текстовых файлов $files=Get-ChildItem C:\data\*.txt | выбрать -расширить полное имя #проверить, существует ли файл внутри массива $files -match "pc.txt" #если совпадение возвращает ключ «True», затем выход, если «False», то создать отчет если ($ файлы -eq 'Ложь') { Get-ADComputer-Фильтр * | Export-Csv -Путь C:\data\pc.txt } еще {выход}
Удаление файлов и папок с помощью PowerShell
Чтобы удалить объекты, используйте командлет Remove-Item. Обратите внимание, что при выполнении требуется ваше подтверждение, если объект не пустой. В приведенном ниже примере показано, как удалить папку IT и все вложенные в нее папки и файлы:
Remove-Item -Path '\\fs\shared\it\' Подтверждать Элемент в \\pdc\shared\it имеет дочерние элементы, и параметр Recurse не был указано. Если вы продолжите, все дочерние элементы будут удалены вместе с элементом. Ты уверены, что хотите продолжить? [Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"):
Если вы уже убедились, что все объекты внутри папки должны быть удалены, вы можете использовать переключатель «Recurse», чтобы пропустить шаг подтверждения:
Remove-Item -Path '\\fs\shared\it\' -Recurse
Удаление файлов и папок старше X дней
Иногда требуется удалить старые файлы из определенного каталога. Вот как это сделать:
$Folder = "C:\Backups" #удалить файлы старше 30 дней Get-ChildItem $Folder -Recurse -Force -ea 0 | ? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-30)} | ForEach-Object { $_ | дель-Форс $_.Полное имя | Исходящий файл C:\log\deletedbackups.txt -Append } #удалить пустые папки и подпапки, если они есть Get-ChildItem $Folder -Recurse -Force -ea 0 | ? {$_.PsIsContainer -eq $True} | ? {$_. getfiles().count -eq 0} | ForEach-Object { $_ | дель-Форс $_.Полное имя | Исходящий файл C:\log\deletedbackups.txt -Append }
Удалить файлы после проверки их существования
Вот как проверить, существует ли файл, и удалить его, если он существует:
$FileName = 'C:\data\log.txt' Если (тестовый путь $FileName){ Удалить элемент $FileName }
Удаление файлов с нескольких компьютеров одним сценарием
Для удаления файлов с удаленных компьютеров необходимо иметь соответствующие разрешения безопасности для доступа к ним. Обязательно используйте пути UNC, чтобы сценарий правильно определял расположение файлов.
$filelist = @(" \c$\Temp", "\c$\Backups") # переменная для удаления файлов и папок $computerlist = Get-Content C:\data\pc.txt #получить список удаленных компьютеров foreach ($computer в $computerlist){ foreach ($ файл в списке $ файлов) { $filepath= Join-Path "\\$computer\" "$filelist" #генерировать unc-пути к файлам или папкам если (тестовый путь $filepath) { Remove-Item $filepath -force -recurse -ErrorAction Continue}}}
Копирование файлов и папок с помощью PowerShell
Командлет Copy-Item позволяет копировать объекты с одного пути на другой. Следующая команда создает резервную копию, копируя файл users.xlsx с одного удаленного компьютера (fs) и сохраняя его на другом (fs2) по сети:
Copy-Item -Path \\fs\Shared\it\users.xlsx -Destination \\fs2\Backups\it\users.xlsx
Если целевой файл уже существует, попытка копирования будет неудачной. Чтобы перезаписать существующий файл, даже если он находится в режиме только для чтения, используйте параметр -Force:
Copy-Item -Path \\fs\Shared\it\users.xlsx -Destination \\fs2\Backups\it\users.xlsx -Force
Скопируйте файлы с помощью PowerShell на удаленный компьютер или с него
Если вы’ при копировании файлов на удаленные компьютеры или с них обязательно используйте пути UNC.
Например, используйте эту команду для копирования файлов с удаленного файлового сервера в локальный каталог C::
Copy-Item \\fs\c$\temp -Recurse C:\data\
Чтобы скопировать файлы с локальный каталог в удаленную папку, просто поменяйте местами источник и место назначения:
Copy-Item C:\data\ -Recurse \\fs\c$\temp
Копирование нескольких файлов с одного сервера на другой по сети в одном сценарии
Вы также можете копировать файлы с одного удаленного сервера на другой. Следующий скрипт рекурсивно копирует папку \\fs\Shared\temp в \\fs\Shared\test:
Copy-Item \\fs\Shared\temp -Recurse \\fs\Shared\test
Копировать только определенные типы файлов
Чтобы скопировать только определенные файлы из исходного содержимого в целевое, используйте параметр -Filter. Например, следующая команда копирует только текстовые файлы из одной папки в другую:
Copy-Item -Filter *.txt -Path \\fs\Shared\it -Recurse -Destination \\fs2\Shared\text
Копировать файлы с помощью команд XCOPY и ROBOCOPY или COM-объектов
Вы также можете запускать XCOPY и Команды ROBOCOPY для копирования файлов или использования COM-объектов, как в примере ниже:
(New-Object -ComObject Scripting.FileSystemObject).CopyFile('\\fs\Shared', 'fs2\Backup')
Перемещение файлов и каталоги с помощью PowerShell
Командлет Move-Item перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного места в другое. Он также может перемещать файл или подкаталог из одного каталога в другое место.
Следующая команда перемещает определенный файл резервной копии из одного места в другое:
Move-Item -Path \\fs\Shared\Backups\1.bak -Destination \\fs2\Backups\archive\1.bak
Это script перемещает всю папку Backups и ее содержимое в другое место:
Move-Item -Path \\fs\Shared\Backups -Destination \\fs2\Backups\archive
После этого появится каталог Backups со всеми его файлами и подпапками. в каталоге архива.
Переименование файлов с помощью PowerShell
Командлет Rename-Item позволяет изменить имя объекта, не затрагивая его содержимое. Невозможно переместить элементы с помощью команды Rename-Item; для этой функции следует использовать командлет Move-Item, как описано выше.
Следующая команда переименовывает файл:
Rename-Item -Path "\\fs\Shared\temp.txt" -NewName "new_temp.txt"
Переименовать несколько файлов
Чтобы переименовать несколько файлов одновременно, используйте такой скрипт:
$files = Get-ChildItem -Path C:\Temp #создать список файлов foreach ($ файл в $ файлах) { $newFileName=$file. Name.Replace("A","B") #замените "A" на "B" Переименовать элемент $file $newFileName }
Изменение расширений файлов с помощью PowerShell
Вы также можете использовать Rename-Item для изменения расширений файлов. Если вы хотите изменить расширения сразу нескольких файлов, используйте командлет Rename-Item с командлетом Get-ChildItem.
Следующий сценарий изменяет все расширения файлов «txt» на «bak». Подстановочный знак (*) обеспечивает включение всех текстовых файлов:
Get-ChildItem \\fs\Shared\Logs\*.txt | Rename-Item -NewName { $_.name -Replace '\.txt$','.bak' }
Используя информацию из этой статьи, вы можете автоматизировать множество простых операций, связанных с управлением файлами в ваших файловых хранилищах, и сэкономить время для более важных задач. Удачи!
Часто задаваемые вопросы
Как создать файл?
Используйте командлет New-Item для создания файла:
New-Item -Path '\\fs\Shared\NewFolder\newfile. txt' -ItemType File
Создание файла перезаписывает любой существующий файл с таким же именем , поэтому вам может потребоваться проверить, существует ли уже файл.
Вы также можете использовать командлет New-Item для создания папок, каталогов или разделов реестра.
Как создать текстовый файл
Чтобы создать новый объект с помощью Windows PowerShell, используйте командлет New-Item и укажите тип элемента, который вы хотите создать, например:
New-Item -Path ' \\fs\Shared\NewFolder\newfile.txt' -ItemType File
Командлет New-Item можно использовать для создания файлов, папок, каталогов и разделов реестра.
Как создать каталог
Чтобы создать новый каталог с помощью PowerShell, используйте командлет New-Item:
New-Item -Path '\\fs\Shared\NewFolder' -ItemType Directory
Вы также можете использовать командлет New-Item для создания файлы, папки или разделы реестра
Как удалить файл?
Чтобы удалить объект, используйте командлет Remove-Item. Подтверждение будет запрошено при выполнении, если объект не пустой.
Remove-Item -Path '\\fs\shared\it\'
Вы также можете удалить все файлы старше X дней или удалить файлы с нескольких компьютеров с помощью PowerShell.
Как скопировать файл?
Используйте командлет Copy-Item для копирования объектов с одного пути на другой. Следующая команда создает резервную копию, копируя файл users.xlsx с одного удаленного компьютера (fs) на другой (fs2) по сети:
Copy-Item -Path \\fs\Shared\it\users.xlsx -Destination \\fs2\Backups\it\users.xlsx
Обратите внимание: если целевой файл уже существует, попытка копирования завершится неудачно. Узнайте, как перезаписывать файлы при их копировании с удаленного компьютера или на него.
Как переместить файл?
Командлет Move-Item перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного места в другое:
Move-Item -Path \\fs\Shared\Backups\1.