Set-Content

Записывает новое содержимое или заменяет существующее содержимое в файле.

Синтаксис

Set-Content
   [-Path] <string[]>
   [-Value] <Object[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [-NoNewline]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <string>]
   [<CommonParameters>]
Set-Content
   [-Value] <Object[]>
   -LiteralPath <string[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [-NoNewline]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <string>]
   [<CommonParameters>]
Set-Content
   [-Path] <string[]>
   [-Value] <Object[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Content
   [-Value] <Object[]>
   -LiteralPath <string[]>
   [-PassThru]
   [-Filter <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Force]
   [-Credential <pscredential>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Описание

Set-Content — командлет строковой обработки, который записывает новое содержимое или заменяет содержимое в файле. Set-Content заменяет существующее содержимое и отличается от командлета Add-Content , который добавляет содержимое в файл. Чтобы отправить содержимое Set-Content , можно использовать параметр Value в командной строке или отправить содержимое через конвейер.

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

Примеры

Пример 1. Замена содержимого нескольких файлов в каталоге

В этом примере содержимое для нескольких файлов в текущем каталоге заменяется.

Get-ChildItem -Path .\Test*.txt

Test1.txt
Test2.txt
Test3.txt

Set-Content -Path .\Test*.txt -Value 'Hello, World'
Get-Content -Path .\Test*.txt

Hello, World
Hello, World
Hello, World

Командлет Get-ChildItem использует параметр Path для перечисления .txt файлов, начинающихся с Test* текущего каталога. Командлет Set-Content использует параметр Path для указания Test*.txt файлов. Параметр Value предоставляет текстовую строку Hello, World , которая заменяет существующее содержимое в каждом файле. Командлет Get-Content использует параметр Path для указания Test*.txt файлов и отображения содержимого каждого файла в консоли PowerShell.

Пример 2. Создание файла и запись содержимого

В этом примере создается новый файл и записывается текущая дата и время в файл.

Set-Content -Path .\DateTime.txt -Value (Get-Date)
Get-Content -Path .\DateTime.txt

1/30/2019 09:55:08

Set-Contentиспользует параметры пути и значения для создания нового файла с именем DateTime.txt в текущем каталоге. Параметр Value используется Get-Date для получения текущей даты и времени. Set-Content записывает объект DateTime в файл в виде строки. Командлет Get-Content использует параметр Path для отображения содержимого DateTime.txt в консоли PowerShell.

Пример 3. Замена текста в файле

Эта команда заменяет все экземпляры слова в существующем файле.

Get-Content -Path .\Notice.txt

Warning
Replace Warning with a new word.
The word Warning was replaced.

(Get-Content -Path .\Notice.txt) |
    ForEach-Object {$_ -Replace 'Warning', 'Caution'} |
        Set-Content -Path .\Notice.txt
Get-Content -Path .\Notice.txt

Caution
Replace Caution with a new word.
The word Caution was replaced.

Командлет Get-Content использует параметр Path для указания файла Notice.txt в текущем каталоге. Команда Get-Content упаковывается в скобки, чтобы команда завершилась до отправки по конвейеру.

Содержимое файла Notice.txt отправляется в конвейер в ForEach-Object командлет. ForEach-Object использует автоматическую переменную $_ и заменяет каждое вхождение предупреждения осторожностью. Объекты отправляются по конвейеру командлету Set-Content . Set-Contentиспользует параметр Path для указания файла Notice.txt и записи обновленного содержимого в файл.

Последний Get-Content командлет отображает обновленное содержимое файла в консоли PowerShell.

Пример 4. Использование фильтров с набором содержимого

Для командлета Set-Content можно указать фильтр. При использовании фильтров для квалификации параметра Path необходимо включить конечную звездочку (*), чтобы указать содержимое пути.

Следующая команда задает содержимое всех *.txt файлов в каталоге C:\Temp пустым значением.

Set-Content -Path C:\Temp\* -Filter *.txt -Value "Empty"

Параметры

-AsByteStream

Это динамический параметр, доступный поставщиком FileSystem . Дополнительные сведения см. в about_FileSystem_Provider.

Указывает, что содержимое должно быть записано в виде потока байтов. Этот параметр появился в PowerShell 6.0.

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

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Confirm

Запрос подтверждения перед выполнением командлета.

Тип:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Credential

Примечание.

Этот параметр не поддерживается поставщиками, установленными с помощью PowerShell. Чтобы олицетворить другого пользователя или повысить свои учетные данные при выполнении этого командлета, используйте Invoke-Command.

Тип:PSCredential
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Encoding

Это динамический параметр, доступный поставщиком FileSystem . Дополнительные сведения см. в about_FileSystem_Provider.

Указывает тип кодировки для целевого файла. Значение по умолчанию — utf8NoBOM.

Кодировка — это динамический параметр, в Set-Contentкоторый добавляется поставщик FileSystem. Этот параметр работает только на дисках с файловой системой.

Допустимые значения для этого параметра приведены следующим образом:

  • ascii: использует кодировку для набора символов ASCII (7-разрядная версия).
  • ansi: использует кодировку для кодовой страницы ANSI текущего языка и региональных параметров. Этот параметр добавлен в PowerShell 7.4.
  • bigendianunicode: кодирует в формате UTF-16 с помощью порядка байтов больших байтов.
  • bigendianutf32: кодирует в формате UTF-32 с помощью порядка байтов больших байтов.
  • oem: использует кодировку по умолчанию для программ MS-DOS и консольных программ.
  • unicode: кодирует в формате UTF-16 с помощью байтового порядка байтов.
  • utf7: кодирует в формате UTF-7.
  • utf8: кодирует в формате UTF-8.
  • utf8BOM: кодирует в формате UTF-8 с меткой порядка байтов (BOM)
  • utf8NoBOM: кодирует в формате UTF-8 без метки порядка байтов (BOM)
  • utf32: кодирует в формате UTF-32.

Начиная с PowerShell 6.2, параметр кодирования также позволяет числовым идентификаторам зарегистрированных кодовых страниц (например) или строковым именам зарегистрированных кодовых страниц (например-Encoding "windows-1251"-Encoding 1251). Дополнительные сведения см. в документации по .NET для Encoding.CodePage.

Начиная с PowerShell 7.4, можно использовать Ansi значение параметра кодировки для передачи числового идентификатора для кодовой страницы ANSI текущего языка и региональных параметров без необходимости указывать его вручную.

Примечание.

UTF-7* больше не рекомендуется использовать. По состоянию на PowerShell 7.1 предупреждение записывается при указании utf7 параметра кодирования .

Тип:Encoding
Допустимые значения:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:utf8NoBOM
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Exclude

Указывает как строковый массив, элемент или элементы, которые этот командлет исключает в операции. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt. Можно использовать подстановочные знаки. Параметр Exclude действует только в том случае, если команда включает содержимое элемента, напримерC:\Windows\*, где подстановочный знак указывает содержимое C:\Windows каталога.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-Filter

Указывает фильтр для квалификации параметра Path . Поставщик FileSystem — единственный установленный поставщик PowerShell, поддерживающий использование фильтров. Синтаксис языка фильтра FileSystem можно найти в about_Wildcards. Фильтры более эффективны, чем другие параметры, так как поставщик применяет их, когда командлет получает объекты, а не фильтрует объекты После их получения.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-Force

Позволяет командлету задать содержимое файла, даже если файл доступен только для чтения. Применение этого параметра зависит от конкретного поставщика. Дополнительные сведения см. в about_Providers. Параметр Force не переопределяет ограничения безопасности.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Include

Указывает, как строковый массив, элемент или элементы, которые этот командлет включает в операцию. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например "*.txt". Можно использовать подстановочные знаки. Параметр Include действует только в том случае, если команда содержит содержимое элемента, например C:\Windows\*, где подстановочный знак указывает содержимое C:\Windows каталога.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-LiteralPath

Указывает путь к одному или нескольким расположениям. Значение LiteralPath используется точно так же, как он типизированный. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности.

Дополнительные сведения см. в about_Quoting_Rules.

Тип:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-NoNewline

Это динамический параметр, доступный поставщиком FileSystem . Дополнительные сведения см. в about_FileSystem_Provider.

Строковые представления входных объектов объединяются для формирования выходных данных. Пробелы или новые строки не вставляются между выходными строками. Новая строка не добавляется после последней выходной строки.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-PassThru

Возвращает объект, представляющий содержимое. По умолчанию этот командлет не создает выходные данные.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Path

Указывает путь к элементу, который получает содержимое. Можно использовать подстановочные знаки.

Тип:String[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:True

-Stream

Это динамический параметр, доступный поставщиком FileSystem . Этот параметр доступен только в Windows. Дополнительные сведения см. в about_FileSystem_Provider.

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

Stream — это динамический параметр, в Set-Contentкоторый добавляется поставщик FileSystem. Этот параметр работает только на дисках с файловой системой.

Командлет можно использовать Set-Content для создания или обновления содержимого любого альтернативного потока данных, например Zone.Identifier. Однако это не рекомендуется для устранения проверок безопасности, которые блокируют файлы, скачанные из Интернета. Если вы убедитесь, что скачанный файл является безопасным, используйте Unblock-File командлет.

Этот параметр появился в PowerShell 3.0. Начиная с PowerShell 7.2, Set-Content можно задать содержимое альтернативных потоков данных из каталогов, а также файлов.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Value

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

Тип:Object[]
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-WhatIf

Показывает, что произойдет при запуске командлета. Командлет не выполняется.

Тип:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

Object

Объект, содержащий новое значение для элемента, можно передать в этот командлет.

Выходные данные

None

По умолчанию этот командлет не возвращает выходные данные.

String

При использовании параметра PassThru этот командлет возвращает строку, представляющую содержимое.

Примечания

  • Set-Content предназначен для обработки строк. Если в него передаются нестроковые объекты Set-Content, он преобразует объект в строку перед его записью. Для записи объектов в файлы используйте Out-File.
  • Командлет Set-Content предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы вывести список поставщиков, доступных в данном сеансе, введите командлет Get-PsProvider. Дополнительные сведения см. в about_Providers.