Windows powershell создать папку

Содержание
  1. Работа с файлами и папками Working with Files and Folders
  2. Получение списка файлов и папок, содержащихся в папке Listing All the Files and Folders Within a Folder
  3. Копирование файлов и папок Copying Files and Folders
  4. Создание файлов и папок Creating Files and Folders
  5. Удаление всех файлов и папок, содержащихся в папке Removing All Files and Folders Within a Folder
  6. Подключение локальной папки как диска Mapping a Local Folder as a drive
  7. Чтение текстового файла в массив Reading a Text File into an Array
  8. Powershell создание файлов и директорий
  9. Создание директорий в Powershell
  10. Возможные ошибки при создании файла в Powershell
  11. Другие варианты использования команды
  12. Создание в Powershell директорий и файлов с New-Item их перенос и копирование
  13. Создание файлов
  14. Создание со вложенными директориями
  15. Перезапись
  16. Запись данных
  17. Мягкие и жесткие ссылки
  18. Создание множества файлов и директорий
  19. Копирование и перемещение папок и файлов
  20. Использование масок для копирования и перемещения
  21. Дополнительные параметры фильтрации
  22. Переименование файлов и директорий
  23. Удаление
  24. Работа с сетевыми папками и SMB
  25. Выполнение команд под другим пользователем

Работа с файлами и папками Working with Files and Folders

Просмотр содержимого дисков Windows PowerShell и управление хранящимися на них элементами аналогично управлению файлами и папками на физических дисках Windows. Navigating through Windows PowerShell drives and manipulating the items on them is similar to manipulating files and folders on Windows physical disk drives. В этой статье описывается выполнение конкретных задач по управлению файлами и папками с помощью PowerShell. This article discusses how to deal with specific file and folder manipulation tasks using PowerShell.

Получение списка файлов и папок, содержащихся в папке Listing All the Files and Folders Within a Folder

Извлечь все элементы непосредственно из папки можно с помощью командлета Get-ChildItem . You can get all items directly within a folder by using Get-ChildItem . Для отображения скрытых и системных элементов добавьте необязательный параметр Force . Add the optional Force parameter to display hidden or system items. Например, эта команда отображает непосредственное содержимое диска C Windows PowerShell (которое совпадает с содержимым физического диска C Windows): For example, this command displays the direct contents of Windows PowerShell Drive C (which is the same as the Windows physical drive C):

Эта команда выводит только элементы, содержащиеся на диске непосредственно, так же как и команда DIR оболочки Cmd.exe или команда ls оболочки UNIX. The command lists only the directly contained items, much like using Cmd.exe ‘s DIR command or ls in a UNIX shell. Для показа вложенных элементов необходимо также указать параметр -Recurse . In order to show contained items, you need to specify the -Recurse parameter as well. (Время выполнения этой операции будет очень велико.) Для вывода всего содержимого диска C введите: (This can take an extremely long time to complete.) To list everything on the C drive:

Командлет Get-ChildItem позволяет отфильтровать элементы с помощью параметров Path , Filter , Include и Exclude , но обычно осуществляется лишь фильтрация по имени. Get-ChildItem can filter items with its Path , Filter , Include , and Exclude parameters, but those are typically based only on name. Сложную фильтрацию на основе других свойств элементов можно выполнить с помощью Where-Object . You can perform complex filtering based on other properties of items by using Where-Object .

Следующая команда находит все исполняемые файлы в папке Program Files, которые были в последний раз изменены после 1 октября 2005 г. и размер которых не менее одного мегабайта и не более десяти мегабайт: The following command finds all executables within the Program Files folder that were last modified after October 1, 2005 and which are neither smaller than 1 megabyte nor larger than 10 megabytes:

Копирование файлов и папок Copying Files and Folders

Копирование выполняется с помощью командлета Copy-Item . Copying is done with Copy-Item . Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak: The following command backs up C:\boot.ini to C:\boot.bak:

Если целевой файл уже существует, то попытка копирования завершается неудачей. If the destination file already exists, the copy attempt fails. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force . To overwrite a pre-existing destination, use the Force parameter:

Эта команда работает, даже если целевой объект доступен только для чтения. This command works even when the destination is read-only.

Так же выполняется и копирование папок. Folder copying works the same way. Эта команда копирует папку C:\temp\test1 в новую папку C:\temp\DeleteMe рекурсивно. This command copies the folder C:\temp\test1 to the new folder C:\temp\DeleteMe recursively:

Можно также скопировать избранные элементы. You can also copy a selection of items. Следующая команда копирует все файлы TXT, содержащиеся в папке C:\data , в папку C:\temp\text : The following command copies all .txt files contained anywhere in C:\data to C:\temp\text :

Для копирования элементов файловой системы можно использовать и другие средства. You can still use other tools to perform file system copies. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject . XCOPY, ROBOCOPY, and COM objects, such as the Scripting.FileSystemObject, all work in Windows PowerShell. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла C:\boot.ini в файле C:\boot.bak : For example, you can use the Windows Script Host Scripting.FileSystem COM class to back up C:\boot.ini to C:\boot.bak :

Читайте также:  Save installed programs windows

Создание файлов и папок Creating Files and Folders

Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Creating new items works the same on all Windows PowerShell providers. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента. If a Windows PowerShell provider has more than one type of item—for example, the FileSystem Windows PowerShell provider distinguishes between directories and files—you need to specify the item type.

Эта команда создает папку C:\temp\New Folder : This command creates a new folder C:\temp\New Folder :

Эта команда создает пустой файл C:\temp\New Folder\file.txt . This command creates a new empty file C:\temp\New Folder\file.txt

При использовании параметра Force с командой New-Item для создания папки, которая уже существует, она не перезапишет и не заменит папку. When using the Force switch with the New-Item command to create a folder, and the folder already exists, it won’t overwrite or replace the folder. Будет просто возвращен имеющийся объект папки. It will simply return the existing folder object. Однако, если использовать New-Item -Force в уже имеющимся файле, файл будет полностью перезаписан. However, if you use New-Item -Force on a file that already exists, the file will be completely overwritten.

Удаление всех файлов и папок, содержащихся в папке Removing All Files and Folders Within a Folder

Удалить вложенные элементы можно с помощью командлета Remove-Item , однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. You can remove contained items using Remove-Item , but you will be prompted to confirm the removal if the item contains anything else. Например, при попытке удаления папки C:\temp\DeleteMe , которая содержит другие элементы, Windows PowerShell предварительно предложит подтвердить удаление этой папки: For example, if you attempt to delete the folder C:\temp\DeleteMe that contains other items, Windows PowerShell prompts you for confirmation before deleting the folder:

Если подтверждение для каждого вложенного элемента нежелательно, задайте параметр Recurse : If you do not want to be prompted for each contained item, specify the Recurse parameter:

Подключение локальной папки как диска Mapping a Local Folder as a drive

Отобразить локальную папку можно с помощью команды New-PSDrive . You can also map a local folder, using the New-PSDrive command. Следующая команда создает локальный диск P: , корневым каталогом которого является локальный каталог Program Files, отображающийся только в сеансе PowerShell: The following command creates a local drive P: rooted in the local Program Files directory, visible only from the PowerShell session:

Как и при использовании сетевых дисков, диски, отображенные в Windows PowerShell, немедленно становятся доступными оболочке Windows PowerShell. Just as with network drives, drives mapped within Windows PowerShell are immediately visible to the Windows PowerShell shell. Чтобы создать подключенный диск, отображающийся в проводнике, нужен параметр -Persist . In order to create a mapped drive visible from File Explorer, the parameter -Persist is needed. Но с этим параметром можно использовать только удаленные пути. However, only remote paths can be used with Persist.

Чтение текстового файла в массив Reading a Text File into an Array

Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. One of the more common storage formats for text data is in a file with separate lines treated as distinct data elements. Командлет Get-Content используется для чтения всего файла за один шаг, как показано далее: The Get-Content cmdlet can be used to read an entire file in one step, as shown here:

Командлет Get-Content сразу рассматривает данные, считанные из файла, как массив с одним элементом на строку содержимого файла. Get-Content already treats the data read from the file as an array, with one element per line of file content. Убедиться в этом можно, проверив свойство Length полученного содержимого: You can confirm this by checking the Length of the returned content:

Эта команда наиболее полезна для непосредственного ввода в Windows PowerShell информационных списков. This command is most useful for getting lists of information into Windows PowerShell directly. Например, можно хранить в файле C:\temp\domainMembers.txt список имен компьютеров или IP-адресов по одному имени на каждую строку файла. For example, you might store a list of computer names or IP addresses in a file C:\temp\domainMembers.txt , with one name on each line of the file. Вы можете использовать командлет Get-Content , чтобы извлечь содержимое файла и поместить его в переменную $Computers : You can use Get-Content to retrieve the file contents and put them in the variable $Computers :

Читайте также:  Виртуальный com порт под windows

Теперь переменная $Computers представляет собой массив, содержащий в каждом элементе имя компьютера. $Computers is now an array containing a computer name in each element.

Powershell создание файлов и директорий

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

Если редакция Windows версии Core, то там необходимости в этом нет, но в этом случае, возможно, понадобится перейти в консоль командой:

Для создания файла в папке откуда запущен powershell нужно написать:

Где «file» — это имя вашего файла, а «txt» его расширение. Кавычки ставить не обязательно, но желательно т.к. powershell не все символы может воспринимать корректно (например пробелы или кириллические символы).

Если нам нужно создать файл в какой-то другой папке, можно сделать так:

Где «c:\papka\» это абсолютный путь к папке. Если в -Path написать просто ‘Papka’, то он будет искать эту папку в том же каталоге, откуда и запущен powershell.

Создание директорий в Powershell

С помощью этой же команды можно создать директорию. Для этого выполните:

Где catalog — имя для папки.

Возможные ошибки при создании файла в Powershell

Если указанного пути не будет существовать или использовано недопустимое имя (со знаком / например) появится ошибка:

В случае, если у нас не будет хватать прав на создание файла или консоль будет запущена не от имени администратора — появится ошибка типа:

Другие варианты использования команды

С помощью этой команды можно так же создать и папку. Для получения справки по команде мы можем выполнить

Если мы хотим увидеть варианты исполнения команды, то можно добавить ключ -Examples

Создание в Powershell директорий и файлов с New-Item их перенос и копирование

Для работы с файлами в Powershell есть около 10 команд. С помощью команды New-Item можно создать файл или папку в Powershell, жесткую и мягкую ссылку. Copy-Item и Move-Item выполняют копирование и перемещение объектов. В этой стать мы рассмотрим все эти операции, а так же удаление директорий и файлов включая сетевые пути, на примерах.

Навигация по посту

Создание файлов

В следующем примере мы создадим файл с расширением ‘.txt’:

По умолчанию файл создается в той директории откуда был запущен сам Powershell. Изменить путь создания файла можно указав путь в Path:

Каждая папка так же является файлом, но для ее создания в Powershell нужно указывать тип ‘Directory’ в ‘ItemType’:

Создание со вложенными директориями

Мы можем создать множество папок не указывая дополнительных параметров:

Если мы захотим создать директорию и файл, то получим ошибку:

  • New-Item : Could not find a part of the path

Исправить эту ошибку можно указав параметр Force, который создаст весь путь целиком:

Перезапись

Ключ Force не только создает родительские объекты в виде папок, но и перезаписывает файлы. Если не указан параметр Force, а файл или папка уже существует — вы получите ошибки:

  • New-Item : The file ‘C:\Dir1\Dir2\Dir3\file.txt’ already exists.
  • New-Item : An item with the specified name C:\Dir1\Dir2\Dir3\ already exists.

Указывая Force — файлы перезаписываются удаляя все содержимое. В случае с папками ничего удалено не будет.

Запись данных

Еще один из способа перезаписи файлов в Powershell — использование символа перенаправления вывода ‘>’. Если объект уже существует — он будет перезаписан, иначе будет создан новый файл:

Почти такой же результат будет если добавить в команду параметр Value. Результат следующего примера будет аналогичен предыдущему:

Мягкие и жесткие ссылки

Кроме файлов и директорий в ItemType можно указать следующие типы ссылок:

  • SymbolicLink (мягкая ссылка) — обычный ярлык на папку или директорию;
  • Junction — старый тип ссылок (до Windows Vista);
  • HardLink (жесткая ссылка) — ссылка на объект в файловой системе. Не работает с директориями.

Каждый файл можно представить как ссылку на объект файловой системы. Ярлык устанавливает связь с именем файла (ссылка на ссылку). При переименовании оригинального файла или его удалении ярлык перестает работать.

Жесткая ссылка работает иначе. Она ссылается на объект файловой системы, а не на имя. Поэтому при удалении или переименовании оригинального файла эта связь не потеряется. Такие ссылки можно представить как копии оригинальных фалов, но которые не занимают дополнительное место на диске. Жесткие ссылки работают в рамках одного раздела и их нельзя использовать на каталогах. Сам объект файловой системы (файл) будет существовать до последней такой ссылки.

В следующем примере я создаю жесткую ссылку, где ‘old_file.txt’ — имя существующего файла, а ‘new_link.txt’ — имя нового:

Создание множества файлов и директорий

Параметр Path может принимать несколько значений. Это значит, что одной командой мы можем создать несколько объектов:

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

Читайте также:  Windows 10 вход через bios
Открываем файл и читаем его содержимое с Get-Content в Powershell

Копирование и перемещение папок и файлов

В следующем примере, с помощью Powershell, будет скопирован файл ‘C:\data.txt’ в директорию ‘C:\Catalog\’:

Перемещение объектов выполняется так же, но с использованием Move-Item:

Если в перемещаемой папке уже существует файл с этим именем, то мы получим ошибку:

  • Move-Item : Cannot create a file when that file already exists

Для исправления этой ситуации можно использовать параметр Force или перемещать файл под другим именем. Новое имя можно указать в Destination:

Каталоги переносятся и копируются так же. Знак ‘\’ в конце Destination говорит, что мы хотим перенести папку внутрь указанной. Отсутствие знака ‘\’ говорит, что это новое имя директории:

Path — принимает список, а это значит, что мы можем указывать несколько значений через запятую.

Использование масок для копирования и перемещения

Во многих командах Powershell доступны следующие специальные символы:

  • * — говорит, что в этом месте есть неизвестное количество неизвестных символов;
  • ? — в этом месте есть один неизвестный символ;
  • [A,B,C] — в этом месте есть одна из следующих букв A,B,C.

Например так мы скопируем все объекты с расширением ‘txt’ из одной папки в другую:

Перемещение сработает так же.

Предыдущий вариант сработает, если мы ищем файлы в текущей директории. Для копирования в Powershell внутри всех вложенных каталогов нужно использовать рекурсивный поиск, который доступен только в Copy-Item. Рекурсивный поиск устанавливается ключом Recurse. В следующем примере будет найден и скопирован файл hosts. В качестве * я указал один из элементов неизвестного пути:

Дополнительные параметры фильтрации

Если предыдущих примеров, где мы находили файлы с неизвестным название, не достаточно, то можно использовать дополнительные параметры. Они доступны в обеих командах Copy-Item и Move-Item:

  • Include — включает объекты с этим упоминанием;
  • Exclude — работает аналогично предыдущему, но исключает объекты;
  • Filter — включает объекты указанные в этом параметре.

Я не вижу смысла использовать все параметры описанные выше в одной команде, но в них есть отличия. Filter будет работать быстрее, так как он работает и фильтрует данные в момент их получения. Include и Exclude сработают после получения всех файлов, но каждое значение для них можно указывать через запятую. Для Include и Exclude так же важно указывать Path с ‘*’ в конце, например ‘C:\dir\*’.

Например мы хотим скопировать все объекты с расширением ‘txt’ и ‘jpg’. Это можно сделать так:

Я бы не рекомендовал использовать Filter в обеих командах. Более удобный способ — это искать файлы с Get-ChildItem, а затем их копировать и перемещать в нужное место. В следующем примере будут перенесены все объекты формата ‘.txt’ и ‘.jpg’ в каталог Directory:

Создание и изменение в Powershell NTFS разрешений ACL

Переименование файлов и директорий

Для переименовывания в Powershell используется Rename-Item. В следующем примере мы укажем новое имя в параметре NewName:

В NewName можно указать путь, но он должен соответствовать источнику. При следующем написании будет ошибка:

  • Rename-Item : Cannot rename the specified target, because it represents a path or device name.

Для массового переименовывания объектов можно использовать конвейер с ‘Get-ChildItem’. Например нам нужно поменять расширения файлов с ».jpg» на «.png» — это можно сделать так:

Удаление

В следующем примере мы удалим файл:

Пустые каталоги в Powershell удаляются так же. Если в папке находятся другие файлы будет запрошено разрешение на удаление.

Избежать таких вопросов можно использовав рекурсию в виде параметра Recurse:

Если нужно удалить все файлы внутри каталога, то нужно добавить знак ‘*’. Если внутри каталога будут находится другие папки с файлами, то запросится подтверждение:

У команды есть параметры, описанные ранее, в виде:

Работа с сетевыми папками и SMB

Для копирования и переноса данных по сети нужно использовать следующий формат:

Он сработает со всеми командами, как для источника так и для назначения:

Выполнение команд под другим пользователем

Любая команда выполняется от имени пользователя, который открыл консоль Powershell. Хоть в командах и присутствует параметр ‘Credential’, но при его использовании вы будете получать ошибку:

  • The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.

Есть несколько способов обойти эти ограничения использовав методы WMI и CIM. В Powershell так же доступен сервис PSRemoting, который создан для выполнения задач удаленно. Мы можем использовать две команды:

  • New-PSItem — подключение к компьютеру и дальнейшая работы с ним;
  • Invoke-Command — одноразовое выполнение команды.

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

В следующем примере будет объявлена переменная в которой будет храниться логин и пароль нужной учетной записи:

После заполнения этой переменной нужно будет передать ее в параметр Credential. Примеры по работе с файлами удаленно от другого пользователя:

Оцените статью