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.