Powershell изменить строку в файле
Консоль Windows PowerShell предоставляет удобную среду для управления командами PowerShell, а также для создания файлов сценариев, с которыми можно работать в дальнейшем. При этом вы можете настроить консоль в соответствии с собственными требованиями, отвечающими вашему индивидуальному стилю
. Например, вам захочется увеличить размер буфера или поменять шрифт и цвет фона. Для такой настройки в PowerShell предусмотрено несколько довольно простых методов. Вы можете установить свойства консоли непосредственно из командного окна, выполнять команды PowerShell для изменения этих установок или добавить сценарии к своему профилю PowerShell, чтобы установки автоматически применялись при запуске.
Еще можно внести изменения в реестр в процессе настройки консоли PowerShell, однако подробное описание этого подхода выходит за рамки данной статьи. Помните, что вносить изменения в реестр – это не самый гибкий и легкий способ настройки консоли PowerShell. К тому же такой подход потребует от вас большой осторожности.
Подробное описание
Консоль PowerShell имеет несколько полезных сочетаний клавиш, с помощью которых можно изменять команды в командной строке PowerShell.
Description
Set-Content is a string-processing cmdlet that writes new content or replaces the content in a file. Set-Content replaces the existing content and differs from the Add-Content cmdlet that appends content to a file. To send content to Set-Content you can use the Value parameter on the command line or send content through the pipeline.
If you need to create files or directories for the following examples, see New-Item.
Example 2: Create a new file and write content
This example creates a new file and writes the current date and time to the file.
Set-Content uses the Path and Value parameters to create a new file named DateTime.txt in the current directory. The Value parameter uses Get-Date to get the current date and time. Set-Content writes the DateTime object to the file as a string. The Get-Content cmdlet uses the Path parameter to display the content of DateTime.txt in the PowerShell console.
Настройка свойств консоли PowerShell
При первом запуске PowerShell внешний вид консоли определяется настройками свойств по умолчанию или параметрами, которые установлены «горячей клавишей» и проходят как аргументы к исполняемому файлу PowerShell. Например, когда вы запускаете PowerShell, дважды щелкая на файле powershell.exe, он открывается с установками свойств по умолчанию. То же касается и запуска PowerShell «горячей клавишей», которую вы создали для исполняемого файла или запуска PowerShell из командной строки Windows. Вы увидите маленькое окно командного процессора с черным фоном и серым шрифтом, как показано на экране 1.
Экран 1. Окно PowerShell при запуске файла powershell.exe |
Если вы запускаете PowerShell из меню «Пуск», то увидите иную картину. В этом случае окно консоли больше, с голубым фоном и серым шрифтом, как показано на экране 2. Отличие обусловлено тем, что процесс установки PowerShell создает пункты меню «Пуск» с параметрами, необходимыми для изменения окружения консоли.
Экран 2. Окно PowerShell при запуске из меню |
Независимо от того, как вы запускаете PowerShell, вы можете изменить внешний вид консоли через настройки свойств. Для доступа к ним щелкните на значке PowerShell в верхнем левом углу окна консоли, а затем на Properties, чтобы открыть диалоговое окно «Свойства».
Диалоговое окно Properties («Свойства») включает четыре вкладки: Options («Параметры»), Font («Шрифт»), Layout («Расположение») и Colors («Цвета»). Каждая из них содержит настройки, которые в случае необходимости можно изменить. На экране 3 показана вкладка Options. Здесь вы можете настроить размер курсора и процедуру запоминания команд. Также предусмотрено два режима редактирования: QuickEdit Mode и Insert Mode. Режим QuickEdit Mode позволяет копировать и выполнять вставку команд в консоли PowerShell с помощью мыши. Режим Insert Mode позволяет вставить новый текст в строку вместо его перезаписи.
Экран 3. Окно свойств PowerShell, вкладка Options |
На экране 4 вы видите вкладку Font, содержащую параметры, которые можно применить к шрифту в консоли PowerShell. Хотя их немного, у вас все же есть несколько вариантов, чтобы выбрать размер и стиль.
Экран 4. Окно свойств PowerShell, вкладка Font |
Вкладка Layout позволяет выбрать размер буфера, размер окна и его расположение, как показано на экране 5. Размер буфера устанавливает ширину (количество символов) и высоту (количество строк) вашего буфера. Размер буфера может быть такой же, как размер окна, и больше него, но он не может быть меньше. Многие администраторы считают, что увеличивать размер буфера, особенно высоту – это удобно. Размер окна определяет ширину и высоту актуального окна консоли. Опять же, оно не может быть больше размера буфера. Область расположения окна указывает, где будет располагаться окно консоли на вашем «рабочем столе», нужно только задать позицию левого верхнего угла окна или позволить сделать это системе.
Экран 5. Вкладка Layout |
На экране 6 показана вкладка Colors, где вы можете выбрать цвета текста и фона. Для этого можно прибегнуть к самому простому способу – выбрать элемент (например, текст на экране, Screen Text), а затем щелкнуть на цвете в панели цветов. Если вам известно заданное значение в схеме Red, Green, Blue (RGB) для определенного цвета, вы можете ввести его, но помните, что это повлияет и на другие элементы того же цвета, в результате чего могут получиться довольно неожиданные эффекты. Вы можете заранее просмотреть сделанные изменения в окне предварительного просмотра, и увидеть, как то или иное изменение повлияло на вид консоли.
Экран 6. Вкладка Colors |
После того, как вы задали разные свойства, щелкните OK, чтобы закрыть диалоговое окно Properties. Все изменения применяются немедленно. На экране 7 показано, как выглядит консоль PowerShell после того, как вы ее расширили, поменяли цвет фона на белый, а текст сделали черным.
Экран 7. Измененное окно PowerShell |
Ваши изменения сохранятся, пока вы перезапускаете PowerShell из места первоначального запуска. К примеру, если вы запускаете PowerShell из меню «Пуск», измените настройки свойств и перезапустите PowerShell из меню «Пуск», и ваши изменения сохранятся. Однако при запуске PowerShell «горячей клавишей», созданной для исполняемого файла, ваши изменения никак не воспроизведутся. Чтобы ваши изменения сохранялись независимо от способа запуска PowerShell, следует предпринять другие шаги, и в первую очередь изучить, как написать сценарий настройки параметров.
Сценарии настройки консоли
Для работы со сценариями в PowerShell необходимо базовое понимание того, как обрабатываются объекты в PowerShell. Объекты формируют основу для большей части сценариев, которые вы создаете в PowerShell, даже если это незаметно на первый взгляд. Объекты обеспечивают структуру для представления данных в PowerShell. Структура состоит из свойств, методов и других элементов, к которым у вас есть доступ во время сессии PowerShell.
Например, когда выполняется команда Get-Host, PowerShell возвращает объект, содержащий подробную информацию об окружении PowerShell, в частности имя, версию и информацию, касающуюся настроек оболочки. Один из элементов объекта Get-Host – это свойство графического интерфейса UI, особый тип свойства, связанный с собственным объектом, производным от класса Microsoft. NET Framework. Объект графического интерфейса в свою очередь включает свойство RawUI, обеспечивающее доступ к специфическим свойствам консоли.
Работая с объектами PowerShell, лучше всего назначать их переменной, чтобы можно было легко получить доступ к элементам объекта. PowerShell предоставляет встроенную переменную —$host—для доступа Get-Host. Это означает, что вы используете переменную $host для доступа к свойствам UI и RawUI.
Свойство RawUI – это особый тип свойств, связанных с собственным объектом, как и со свойством UI. Свойства консоли доступны через объект RawUI. Давайте на примере рассмотрим, как это работает. Следующая команда создает переменную под именем $console и назначает экземпляр объекта RawUI переменной:
Отметим, что объект RawUI доступен с указанием переменной $host, затем с указанием свойства UI и с последующим указанием свойства RawUI. Если присвоить команду $host.UI.RawUI переменной $console, переменная создается как тип объекта RawUI, предоставляющий доступ к свойствам консоли, чтобы вы могли их конфигурировать.
Например, следующие команды устанавливают свойство ForegroundColor (то есть текст) и свойство BackgroundColor объекта RawUI:
Как мы видим, необходимо только задать переменную $console с последующим именем свойства. Следом идет знак равенства (=) и новый цвет, заключенный в двойные кавычки. В данном случае задается черный цвет для текста и белый – для фона.
Когда вы выполняли эти команды, то наверняка заметили, что изменения сразу же были применены к консоли, так что окно стало выглядеть довольно странно, поскольку только самые последние строки отражают изменения в цвете текста и фона. Самый простой способ оформить ваш экран по своему вкусу, это выполнить следующую команду, чтобы очистить экран и начать с чистой строки:
Теперь давайте взглянем на другое свойство RawUI — BufferSize. Как следует из названия, оно позволяет установить ширину и высоту буфера. Однако это одно из особых свойств, связанных с его собственным объектом, а значит, лучший подход – задать переменную для хранения объекта. Теперь у вас есть доступ к свойствам из этой переменной, как видно из примера:
Сначала вы создаете переменную the $buffer для хранения объекта BufferSize. Затем вы используете эту переменную для установки свойств Width («ширина») и Height («высота»), аналогично тому, как до этого были установлены цвета текста и фона. Тем не менее, вы должны выполнить еще один шаг, а именно присвоить значения переменной $buffer фактическому свойству BufferSize объекта RawUI.
То же справедливо и для установки размера самого окна, как видно из сценария:
Чтобы упростить вызов этих свойств, вы можете присвоить свойство PrivateData переменной, а затем вызвать переменную, как показано в сценарии:
Сначала вы создаете переменную под именем $colors для хранения объекта PrivateData. Затем вы используете переменную для доступа к нескольким свойствам объекта, чтобы определить их цвета. В основном такой подход используется для установки свойств ForegroundColor и BackgroundColor объекта RawUI. Вы просто определяете значения вместо присваивания переменной $colors свойству PrivateData, как делали в случае с BufferSize и WindowSize.
Определив все свойства, снова выполните команду Clear-Host:
Настройка свойств консоли PowerShell
При первом запуске PowerShell внешний вид консоли определяется настройками свойств по умолчанию или параметрами, которые установлены «горячей клавишей» и проходят как аргументы к исполняемому файлу PowerShell. Например, когда вы запускаете PowerShell, дважды щелкая на файле powershell.exe, он открывается с установками свойств по умолчанию. То же касается и запуска PowerShell «горячей клавишей», которую вы создали для исполняемого файла или запуска PowerShell из командной строки Windows. Вы увидите маленькое окно командного процессора с черным фоном и серым шрифтом, как показано на экране 1.
Экран 1. Окно PowerShell при запуске файла powershell.exe |
Если вы запускаете PowerShell из меню «Пуск», то увидите иную картину. В этом случае окно консоли больше, с голубым фоном и серым шрифтом, как показано на экране 2. Отличие обусловлено тем, что процесс установки PowerShell создает пункты меню «Пуск» с параметрами, необходимыми для изменения окружения консоли.
Экран 2. Окно PowerShell при запуске из меню |
Независимо от того, как вы запускаете PowerShell, вы можете изменить внешний вид консоли через настройки свойств. Для доступа к ним щелкните на значке PowerShell в верхнем левом углу окна консоли, а затем на Properties, чтобы открыть диалоговое окно «Свойства».
Диалоговое окно Properties («Свойства») включает четыре вкладки: Options («Параметры»), Font («Шрифт»), Layout («Расположение») и Colors («Цвета»). Каждая из них содержит настройки, которые в случае необходимости можно изменить. На экране 3 показана вкладка Options. Здесь вы можете настроить размер курсора и процедуру запоминания команд. Также предусмотрено два режима редактирования: QuickEdit Mode и Insert Mode. Режим QuickEdit Mode позволяет копировать и выполнять вставку команд в консоли PowerShell с помощью мыши. Режим Insert Mode позволяет вставить новый текст в строку вместо его перезаписи.
Экран 3. Окно свойств PowerShell, вкладка Options |
На экране 4 вы видите вкладку Font, содержащую параметры, которые можно применить к шрифту в консоли PowerShell. Хотя их немного, у вас все же есть несколько вариантов, чтобы выбрать размер и стиль.
Экран 4. Окно свойств PowerShell, вкладка Font |
Вкладка Layout позволяет выбрать размер буфера, размер окна и его расположение, как показано на экране 5. Размер буфера устанавливает ширину (количество символов) и высоту (количество строк) вашего буфера. Размер буфера может быть такой же, как размер окна, и больше него, но он не может быть меньше. Многие администраторы считают, что увеличивать размер буфера, особенно высоту – это удобно. Размер окна определяет ширину и высоту актуального окна консоли. Опять же, оно не может быть больше размера буфера. Область расположения окна указывает, где будет располагаться окно консоли на вашем «рабочем столе», нужно только задать позицию левого верхнего угла окна или позволить сделать это системе.
Экран 5. Вкладка Layout |
На экране 6 показана вкладка Colors, где вы можете выбрать цвета текста и фона. Для этого можно прибегнуть к самому простому способу – выбрать элемент (например, текст на экране, Screen Text), а затем щелкнуть на цвете в панели цветов. Если вам известно заданное значение в схеме Red, Green, Blue (RGB) для определенного цвета, вы можете ввести его, но помните, что это повлияет и на другие элементы того же цвета, в результате чего могут получиться довольно неожиданные эффекты. Вы можете заранее просмотреть сделанные изменения в окне предварительного просмотра, и увидеть, как то или иное изменение повлияло на вид консоли.
Экран 6. Вкладка Colors |
После того, как вы задали разные свойства, щелкните OK, чтобы закрыть диалоговое окно Properties. Все изменения применяются немедленно. На экране 7 показано, как выглядит консоль PowerShell после того, как вы ее расширили, поменяли цвет фона на белый, а текст сделали черным.
Экран 7. Измененное окно PowerShell |
Ваши изменения сохранятся, пока вы перезапускаете PowerShell из места первоначального запуска. К примеру, если вы запускаете PowerShell из меню «Пуск», измените настройки свойств и перезапустите PowerShell из меню «Пуск», и ваши изменения сохранятся. Однако при запуске PowerShell «горячей клавишей», созданной для исполняемого файла, ваши изменения никак не воспроизведутся. Чтобы ваши изменения сохранялись независимо от способа запуска PowerShell, следует предпринять другие шаги, и в первую очередь изучить, как написать сценарий настройки параметров.
Режим вставки и замены
Чтобы изменить режим перезаписи, нажмите клавишу INSERT . Чтобы вернуться в режим вставки, еще раз нажмите клавишу INSERT .
Parameters
Specifies that the content should be read as a stream of bytes. This parameter was introduced in PowerShell 6.0.
A warning occurs when you use the AsByteStream parameter with the Encoding parameter. The AsByteStream parameter ignores any encoding and the output is returned as a stream of bytes.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Prompts you for confirmation before running the cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
This parameter is not supported by any providers installed with PowerShell. To impersonate another user, or elevate your credentials when running this cmdlet, use Invoke-Command.
Type: | PSCredential |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Specifies the type of encoding for the target file. The default value is utf8NoBOM .
Encoding is a dynamic parameter that the FileSystem provider adds to Set-Content . This parameter works only in file system drives.
The acceptable values for this parameter are as follows:
- ascii : Uses the encoding for the ASCII (7-bit) character set.
- bigendianunicode : Encodes in UTF-16 format using the big-endian byte order.
- bigendianutf32 : Encodes in UTF-32 format using the big-endian byte order.
- oem : Uses the default encoding for MS-DOS and console programs.
- unicode : Encodes in UTF-16 format using the little-endian byte order.
- utf7 : Encodes in UTF-7 format.
- utf8 : Encodes in UTF-8 format.
- utf8BOM : Encodes in UTF-8 format with Byte Order Mark (BOM)
- utf8NoBOM : Encodes in UTF-8 format without Byte Order Mark (BOM)
- utf32 : Encodes in UTF-32 format.
UTF-7* is no longer recommended to use. As of PowerShell 7.1, a warning is written if you specify utf7 for the Encoding parameter.
Type: | Encoding |
Accepted values: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | Named |
Default value: | UTF8NoBOM |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies, as a string array, an item or items that this cmdlet excludes in the operation. The value of this parameter qualifies the Path parameter. Enter a path element or pattern, such as *.txt . Wildcard characters are permitted. The Exclude parameter is effective only when the command includes the contents of an item, such as C:\Windows\* , where the wildcard character specifies the contents of the C:\Windows directory.
Type: | String [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
Specifies a filter to qualify the Path parameter. The FileSystem provider is the only installed PowerShell provider that supports the use of filters. You can find the syntax for the FileSystem filter language in about_Wildcards. Filters are more efficient than other parameters, because the provider applies them when the cmdlet gets the objects rather than having PowerShell filter the objects after they are retrieved.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
Forces the cmdlet to set the contents of a file, even if the file is read-only. Implementation varies from provider to provider. For more information, see about_Providers. The Force parameter does not override security restrictions.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies, as a string array, an item or items that this cmdlet includes in the operation. The value of this parameter qualifies the Path parameter. Enter a path element or pattern, such as "*.txt" . Wildcard characters are permitted. The Include parameter is effective only when the command includes the contents of an item, such as C:\Windows\* , where the wildcard character specifies the contents of the C:\Windows directory.
Type: | String [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
Specifies a path to one or more locations. The value of LiteralPath is used exactly as it is typed. No characters are interpreted as wildcards. If the path includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.
Type: | String [ ] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
The string representations of the input objects are concatenated to form the output. No spaces or newlines are inserted between the output strings. No newline is added after the last output string.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Returns an object that represents the content. By default, this cmdlet does not generate any output.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the path of the item that receives the content. Wildcard characters are permitted.
Type: | String [ ] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | True |
This Parameter is only available on Windows.
Specifies an alternative data stream for content. If the stream does not exist, this cmdlet creates it. Wildcard characters are not supported.
Stream is a dynamic parameter that the FileSystem provider adds to Set-Content . This parameter works only in file system drives.
You can use the Set-Content cmdlet to create or update the content of any alternate data stream, such as Zone.Identifier . However, we do not recommend this as a way to eliminate security checks that block files that are downloaded from the Internet. If you verify that a downloaded file is safe, use the Unblock-File cmdlet.
This parameter was introduced in PowerShell 3.0.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the new content for the item.
Type: | Object [ ] |
Position: | 1 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Shows what would happen if the cmdlet runs. The cmdlet is not run.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Заполнение нажатием клавиши TAB
Чтобы завершить имя командлета, параметр или путь, нажмите клавишу Tab . Чтобы прокрутить список значений, снова нажмите клавишу Tab .
Summary: The Scripting Wife learns how to use Windows PowerShell and regular expressions to replace text in strings.
Microsoft Scripting Guy, Ed Wilson, here. I just finished a meeting with the Microsoft TechEd people about doing a series of five Live Meetings next week (beginning on March 28) about Windows PowerShell for the Road to TechEd. It will be a way cool Scripting Week, and sign up is already going on. The series will run Monday through Friday (five sessions), and they are called PowerShell: Learn It Now Before It’s an Emergency. The sessions will be live at 8:00 (Pacific Standard Time -8 GMT).
When the TechEd people asked me about doing a Road to TechEd Live Meeting, I said I would like to do an entire week, but only if I could schedule it prior to the 2011 Scripting Games. They were great to work with, and they were flexible with my scheduling. Therefore, we now have a week of Live Meetings for a last minute work out to get you into top shape for the games.
Speaking of learning Windows PowerShell and getting ready for the 2011 Scripting Games, I wonder what the Scripting Wife is up to.
“Yoo hoo, Scripting Wife,” I said with a rather loud voice.
I waited for a seemingly long time, with my ears straining for the slightest sound.
“Hmm…where did she go?” I said to myself. “Where are you, my dear?”
Without warning, she was standing in the doorway of my home office. I do not know how she does that. At times, it seems that she floats silently through the house.
“Did you bellow?” she asked mockingly.
“I am not certain ‘bellow’ is the correct word—perhaps ‘discretely inquire’ would be better,” I suggested.
“I am not your blog that you can edit. I said bellow,” she stated matter-of-factly.
“Well then…I ‘bellowed.’ You need to learn some more regular expressions if you expect to compete in this year’s Windows PowerShell Scripting Games,” I said.
“Instruct me, oh my magnificent fount of scripting knowledge,” I imagined her saying.
“Show me, Script Monkey,” she actually said.
“OK, I will slide over and let you drive. Open the Windows PowerShell prompt and type ‘dollar a equals this is a string,’” I said.
“Not that old thing. I have something better to type,” she said.
The following code is what she typed ( is one tap of the Space bar, is the Enter or Return key):
“You think you are pretty smart,” I deadpanned.
“I am indeed,” she said with a laugh.
“OK, if you want to find out if the word Script is in the string stored in $a, what would you do?” I asked.
“I would use the Match operator,” she said triumphantly.
Without a second’s hesitation, she typed the following.
“That will work. Now, I am going to teach you another special character—it is the dollar sign. It is like the opposite of the caret character that I showed you yesterday in that it means the match has to occur at the end of the string,” I said. “I want you to match the word boring at the end of the string.”
The Scripting Wife thought for a second, and typed the following command:
“Excellent. You avoided a trap that I set for you by including the exclamation point in your match. Now remove the exclamation point and see what happens,” I suggested.
She immediately recalled her previous command, and removed the exclamation point. Here is her command and the associated output:
“Let me see how you are doing,” I asked.
She scooted over a bit, and I looked at her Windows PowerShell console, which is shown in the following image:
“Now that we know that we can match words in a string in different positions, let’s make some modifications to the string. To do this, we will use the Replace operator. The Replace operator works just like the Match operator. The syntax is input string, operator, match pattern, replacement string. Let me draw it for you,” I said.
I picked up a piece of paper, and drew the following table.
“The cool thing is that the syntax is just like the Match operator, except that you add the replacement string to it. This is really helpful because I always use the Match operator to test my match pattern prior to using the Replace operator,” I said.
“I got it already. Let me show you,” she said impatiently.
The Scripting Wife typed for only a few seconds. She used the Up arrow to recall her previous command, and changed Match to Replace. She then used the End key to go to the end of the command and added the word exciting to the command. Here is her command:
PS C:\> $a -replace "boring!$", "exciting!"
Script Monkeys have a tendency to be exciting!
PS C:\>
“Now check the string that is stored in the $a variable,” I said.
She pressed three keys and said, “It is still the same.”
“Therefore, if you want to actually replace text in the variable, you need to assign it to the variable by using the equals sign. Go ahead and make that change, and show me your work,” I said.
She thought for a few seconds, and then used the Up arrow to retrieve her command. Here is the command that she created:
The following image shows all the commands she used today.
“OK, exciting, Script Monkey. I have had all the fun I can stand. I will see you later,” she said as she headed for the door.
“Wait, what about lunch?” I asked.
“There are some bananas on the kitchen counter downstairs. I also picked up a coconut while I was at the store. You can fix that too,” she said. “See ya later.”
And with that, she was gone.
Writes new content or replaces existing content in a file.
Удалить символы
Чтобы удалить символ, расположенный за положением курсора, нажмите клавишу Backspace .
Чтобы удалить символ в позиции курсора, нажмите клавишу Delete .
Пример применения 1
Предположим, что требуется преобразовать вывод Net View в список имен компьютеров с разделителями запятыми. Сначала можно использовать команду Net View с операторами -match и -replace для формирования списка имен компьютеров, например:
Описания шаблонов регулярных выражений можно найти в таблице 1. Файл Computers.txt содержит имена компьютеров из команды Net View, по одному имени в строке. Затем можно заменить в файле переходы на новую строку запятыми с помощью команды
Эта команда заменяет запятыми все символы \r\n (возврат каретки и перевод строки) в файле и выводит файл. При необходимости можно добавить параметр -Overwrite, чтобы заменить исходный файл измененной копией, например:
Добавление линии
Чтобы добавить линию, нажмите клавишу SHIFT + Ввод .
Можно добавить несколько строк. Каждая дополнительная строка начинается с >> строки продолжения. Нажмите клавишу Ввод , чтобы выполнить команду.
Inputs
You can pipe an object that contains the new value for the item to Set-Content .
Example 1: Replace the contents of multiple files in a directory
This example replaces the content for multiple files in the current directory.
The Get-ChildItem cmdlet uses the Path parameter to list .txt files that begin with Test* in the current directory. The Set-Content cmdlet uses the Path parameter to specify the Test*.txt files. The Value parameter provides the text string Hello, World that replaces the existing content in each file. The Get-Content cmdlet uses the Path parameter to specify the Test*.txt files and displays each file's content in the PowerShell console.
Добавление сценария настройки консоли в файл настроек
Возможность создания сценариев настроек консоли упрощает применение настроек в любое время, когда вам нужно. Вы можете сохранить их в файле сценария и вызвать файл, когда это необходимо. Или же можно вырезать и вставить сценарий в консоли и запускать команды этим способом. В любом случае вам необходимо иметь доступ к своему файлу сценария в любое время, чтобы применить настройки к консоли. Удобнее всего сохранить сценарий в одном из файлов настроек PowerShell.
PowerShell поддерживает четыре типа файлов настроек и выполняет их при запуске в определенном порядке. Однако подробное рассмотрение файлов настроек PowerShell выходит за рамки данной статьи. Итак, давайте создадим файл, относящий к текущему пользователю.
Чтобы узнать, где должен располагаться файл, вы можете применить встроенную переменную $profile для возвращения пути и имени, используемого для файла. Для этого просто запустите команду:
Переменная возвращает полное имя файла, например C:UsersAdministratorDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1. Тем не менее, основываясь лишь на том, что переменная $profile указывает на файл, нельзя сделать вывод о существовании файла. Поэтому следующим шагом будет запуск команды:
Команда Test-Path проверяет наличие файла. Если он существует, команда возвращает True; если нет, возвращается False. В последнем случае вам нужно выполнить следующую команду, прежде чем вы предпримите какие-либо другие действия:
Команда New-Item создает файл на основе аргумента, переданного в параметре -path, в данном случае это переменная $profile. Параметр -type указывает, что создаваемый элемент — не что иное, как файл (как и определено ключевым словом «файл»). Параметр -force предписывает команде создать файл.
После того, как файл создан, вы можете повторить команду Test-Path и убедиться, что o она возвращает True. Готовый файл можно редактировать с помощью команды:
Данная команда открывает пустой файл в Notepad. Затем вы можете добавить любой сценарий конфигурации. Добавив код для настройки, рассмотренный нами ранее, вы получите файл, который будет выглядеть, как на экране 9.
Экран 9. Файл с настройками окна консоли |
Однако учтите, что сценарий включает в себя команду:
Эта команда всего лишь предписывает PowerShell установить корневую папку в C:. Вы можете указать свою папку. Можно также задать «горячую клавишу» для быстрого перехода к корневой папке или определить корневую папку во время сессии PowerShell. Однако ее добавление к вашему файлу настроек помогает сохранить все настройки в одном месте. Кроме того, можно включить дополнительные команды в файл, например определить переменные, которые вы захотите использовать в каждой сессии.
Когда вы убедитесь, что ваш файл содержит все необходимое, просто сохраните все установки и закройте Notepad. Затем вы должны перезапустить PowerShell для применения настроек. Вы можете перезапустить PowerShell из любого местоположения. Тот же самый файл настроек будет применяться в каждом случае. Фактически вы даже можете сохранить свой файл в другой папке, так что сможете применить настройки к другим экземплярам PowerShell, и при этом не имеет значения, на каком компьютере вы работаете. Этот подход также позволяет разделять общий файл с другими пользователями. Не забудьте проверить документацию PowerShell, которая содержит более подробную информацию о работе с файлами настроек.
Экран 10. Ошибка при запуске файла с настройками |
Для запуска сценария выполните команду:
Эта команда позволяет запускать локальные или удаленные сценарии, имеющие цифровую подпись надежного издателя. Помните, однако, что политика этапа исполнения регулирует возможность или невозможность исполнения сценариев на вашей системе. Неправильные настройки поставят под угрозу безопасность системы. Убедитесь, что вы внимательно прочитали информацию о политиках этапа исполнения в документации PowerShell, прежде чем вносить какие-либо изменения в систему.
Outputs
None or System.String
When you use the PassThru parameter, Set-Content generates a System.String object that represents the content. Otherwise, this cmdlet does not generate any output.
В Windows PowerShell предусмотрены встроенные возможности сопоставления и замены строк с помощью операторов сравнения. Однако в PowerShell нет собственной команды для замены строк текста в файлах, и, чтобы устранить этот изъян, я подготовил сценарий Replace-FileString.ps1. В этой статье сначала я покажу, как эффективно использовать возможности PowerShell, а затем речь пойдет о применении Replace-FileString.ps1
Удалить символы из строки
Чтобы удалить все символы с позиции курсора до конца строки, нажмите клавишу CTRL + End .
Чтобы удалить все символы из позиции курсора в начало строки, нажмите CTRL + Home .
Если были добавлены строки, то символы удаляются из текущей строки и добавленных строк.
Example 3: Replace text in a file
This command replaces all instances of word within an existing file.
The Get-Content cmdlet uses the Path parameter to specify the Notice.txt file in the current directory. The Get-Content command is wrapped with parentheses so that the command finishes before being sent down the pipeline.
The contents of the Notice.txt file are sent down the pipeline to the ForEach-Object cmdlet. ForEach-Object uses the automatic variable $_ and replaces each occurrence of Warning with Caution. The objects are sent down the pipeline to the Set-Content cmdlet. Set-Content uses the Path parameter to specify the Notice.txt file and writes the updated content to the file.
The last Get-Content cmdlet displays the updated file content in the PowerShell console.
Переместить влево и вправо
Чтобы переместить курсор на один символ влево, нажмите клавишу стрелка влево .
Чтобы переместить курсор на одно слово влево, нажмите клавиши CTRL + стрелка влево .
Чтобы переместить курсор на один символ вправо, нажмите стрелку вправо .
Чтобы переместить курсор на одно слово вправо, нажмите клавишу CTRL + стрелка вправо .
Сценарий Replace-FileString.ps1
Часто при работе с текстовыми файлами бывает полезно заменить строки в файле с использованием регулярных выражений, а затем записать результаты в первоначальный файл. В PowerShell нет команды с такой функциональностью, поэтому я подготовил сценарий Replace-FileString.ps1. Его действие аналогично открытию файла в программе «Блокнот», выполнению операции поиска и замены и сохранению файла. Но, в отличие от «Блокнота», этот сценарий можно использовать для замены строк в нескольких файлах одновременно.
Для Replace-FileString.ps1 требуется PowerShell 2.0. Параметры командной строки для сценария приведены в таблице 2. Кроме параметров, перечисленных в таблице 2, сценарий распознает типовые параметры -Confirm, -Verbose и -WhatIf.
Таблица 2. Параметры сценария Replace-FileString.ps1 |
Существует два обязательных параметра: -Pattern и -Replacement. Также необходимо указать файл, в котором будут выполнены поиск и замена строк. Сделать это можно двумя способами. Первый способ — использовать параметр -Path или -LiteralPath в команде следующего вида:
Обычно нет нужды использовать параметр -LiteralPath, если только не требуется указать путь или имя файла с символами, часто интерпретируемыми PowerShell как универсальные. Типичный пример — квадратные скобки, [].
Чтобы продемонстрировать использование Replace-FileString.ps1, рассмотрим три примера применения. В них показано, как с помощью сценария преобразовать вывод Net View в список имен компьютеров с разделительными запятыми, заменить данные в. ini-файлах и заменить путь LDAP в наборе сценариев.
Examples
Консоль для пользователя
PowerShell обеспечивает достаточную гибкость при настройке консоли. Вы можете установить свойства консоли, запускать сценарии для настройки параметров или изменять свой файл настроек, чтобы они применялись всякий раз при запуске PowerShell. Добавление соответствующего сценария в файл настроек даст вам наибольшую гибкость при наименьших затратах на техническое обслуживание в течение долгого времени. Файл настроек сохранит ваш сценарий, а значит, вам не придется повторно применять настройки всякий раз при запуске PowerShell. Такой подход обеспечивает больше возможностей, чем свойства консоли, и для вас не будет играть никакой роли, запускаете вы PowerShell из меню «Пуск» или откуда-то еще. Благодаря продуманной среде для написания сценариев, которую предусматривает PowerShell, вам ничто не мешает сделать консоль настолько удобной в работе, насколько это возможно.
Описание процесса изменения команд в командной строке PowerShell.
Syntax
Перейти к началу или концу строки
Чтобы перейти к началу строки, нажмите клавишу Home .
Чтобы перейти к концу строки, нажмите клавишу End .
Если строки были добавлены, дважды нажмите клавишу Home или End , чтобы перейти к началу или концу строк.
Пример применения 2
Предположим, у нас имеется приложение клиент-сервер MyApplication. Несколько компьютеров в сети используют клиентское приложение для подключения к серверу appserver1 через TCP-порт 7840. Чтобы устранить уязвимое место, администратор информационной защиты распорядился выполнять серверный компонент приложения на другом сервере (appserver2) и использовать другой порт (8740). Клиентское приложение хранит имя сервера и номер TCP-порта в файле C:\Program Files\My Application\MyApp.ini. На экране 1 показана соответствующая часть MyApp.ini для компьютера с именем acct15.
Экран 1. MyApp.ini |
Нельзя просто передать обновленный экземпляр файла MyApp.ini на соответствующие клиентские компьютеры, так как этот файл содержит сведения о клиенте (в данном случае имя компьютера). Но можно использовать Replace-FileString.ps1 для обновления. ini-файлов в компьютерах.
Сначала необходимо поместить имена компьютеров, на которых выполняется клиентское приложение, в текстовый файл Clients.txt, по одному имени на строке (экран 2). Затем можно использовать команду в листинге 2, чтобы изменить файлы MyApp.ini.
Экран 2. Clients.txt |
В этой команде Get-Content извлекает имя каждого компьютера из Clients.txt. Команда ForEach-Object получает файл MyApp.ini с каждого компьютера с помощью команды Get-Item.
Наконец, команда использует полученный объект-файл как входной для сценария Replace-FileString.ps1. С помощью шаблона и строк замены, описанных в таблице 3, наряду с параметром -Overwrite сценарий вносит изменения в MyApp.ini. Механизм регулярных выражений. NET не поддерживает управляющие последовательности (такие, как \r и \n) в строке замены, поэтому в команде используются круглые скобки и символы $1 для вставки разрыва строки.
Таблица 3. Шаблон для примера применения 2 |
Example 4: Use Filters with Set-Content
You can specify a filter to the Set-Content cmdlet. When using filters to qualify the Path parameter, you need to include a trailing asterisk ( * ) to indicate the contents of the path.
The following command set the content all *.txt files in the C:\Temp directory to the Value empty.
Собственные возможности PowerShell
С помощью имеющихся в PowerShell операторов -like, -match и -replace пользователи, мало знакомые с программированием, могут без труда сопоставлять и заменять строки. В командной строке PowerShell проще экспериментировать с регулярными выражениями. NET, чем в традиционных языках сценариев. Регулярное выражение (иногда именуемое regex) — строка, содержащая специальные символы или последовательности символов, которые представляют другие символы или их последовательности. Регулярные выражения похожи на универсальные символы, но гораздо выразительнее. Знакомство с регулярными выражениями можно начать с раздела about_regular_expressions в «Справке PowerShell». Для просмотра раздела введите
в командной строке PowerShell.
Очевидная область применения регулярных выражений — замена строк в файлах. Например, требуется извлечь только имена компьютеров из вывода команды Net View. Если запустить команду
а затем открыть файл List.txt в программе «Блокнот», то видно, что в нем присутствует много разнообразной избыточной информации, в том числе заголовки столбцов, дополнительные пробелы в конце каждой строки и нижняя строка, в которой сообщается об успешном завершении команды. С помощью регулярных выражений в PowerShell можно извлечь из вывода только имена компьютеров. Например, рассмотрим команду
Хотя команда показана на нескольких строках, ее следует вводить в одной строке в консоли PowerShell. То же относится и к другим командам, разнесенным по нескольким строкам. Команда Get-Content извлекает отдельные строки из List.txt. Затем команда Where-Object с помощью оператора -match проверяет, начинается ли строка с двух обратных косых черт. Такие строки передаются в команду ForEach-Object, где с помощью оператора -replace отбираются только имена компьютеров.
Остановимся подробнее на операторе -match, который используется с последовательностью ^\\\\. Символ каре (^) указывает, что нужно сопоставить начальные символы. Косая обратная черта — управляющий символ для регулярных выражений, поэтому нужно использовать две косые обратные черты (\\) для представления одной косой обратной черты (\). Таким образом, в общей сложности получается четыре косые обратные черты. В таблице 1 описаны этот и другие шаблоны регулярных выражений, используемые в команде.
Таблица 1. Шаблоны в коде извлечения |
Пример применения 3
Предположим, набор сценариев VBScript для управления системой был загружен из веб-узла в папку C:\SampleScripts на компьютере. Все сценарии содержат типовой LDAP-путь DC=fabrikam, DC=com. Вместо того чтобы редактировать сценарии по одному, можно использовать Replace-FileString.ps1, чтобы заменить типовой путь LDAP на путь LDAP для конкретной сети. Для этого достаточно выполнить команду
Где ‘your LDAP path’ — путь LDAP конкретной сети.
Регулярные выражения — удобное средство изменения файлов
В PowerShell нет собственной команды для замены строк в файлах, но этот изъян можно устранить с помощью Replace-FileString.ps1. Сценарий позволяет просто заменять строки в одном или нескольких файлах с использованием регулярных выражений.
Читайте также: