Работа со строками в PowerShell

PowerShellPowerShell

  • Время чтения: 5 мин
  • Соавторы

PowerShell — это оболочка командной строки на основе задач, созданная на базе .NET Framework, с языком сценариев. Она позволяет системным администраторам и опытным пользователям быстро автоматизировать администрирование различных операционных систем (Linux, macOS, Unix и Windows) и процессов, связанных с работающими в этих операционных системах приложениями.Built on the .NET Framework, PowerShell is a task-based command-line shell and scripting language; it is designed specifically for system administrators and power-users, to rapidly automate the administration of multiple operating systems (Linux, macOS, Unix, and Windows) and the processes related to the applications that run on those operating systems.

Исходный код PowerShell открытPowerShell is open source

Базовый исходный код PowerShell теперь доступен в GitHub, и участники сообщества могут вносить в него свои дополнения.PowerShell base source code is now available in GitHub and open to community contributions.См. Код PowerShell в GitHub.See PowerShell source on GitHub.

Вы можете начать с нужных вам элементов в разделе Получить PowerShell.You can start with the bits you need at get PowerShell.Или, возможно, с краткого обзора в разделе Приступая к работеOr, perhaps, with a quick tour at Getting Started

Задачи при проектировании сценариев PowerShellPowerShell design goals

Windows PowerShell помогает улучшить среду командной строки и сценариев за счет устранения застарелых проблем и добавления новых функций.Windows PowerShell is designed to improve the command-line and scripting environment by eliminating long-standing problems and adding new features.

Возможность обнаруженияDiscoverability

Windows PowerShell упрощает обнаружение своих возможностей.Windows PowerShell makes it easy to discover its features.Например, чтобы получить список командлетов для просмотра и изменения служб Windows, введите следующее:For example, to find a list of cmdlets that view and change Windows services, type:

Узнав, какой командлет выполняет задачу, можно получить дополнительные сведения о нем с помощью командлета Get-Help.After discovering which cmdlet accomplishes a task, you can learn more about the cmdlet by using the Get-Help cmdlet.Например, для отображения справки по командлету Get-Service введите:For example, to display help about the Get-Service cmdlet, type:

Большинство командлетов выводят объекты, которые могут быть обработаны и преобразованы в текст для просмотра.Most cmdlets emit objects which can be manipulated and then rendered into text for display.Чтобы полностью понять выходные данные этого командлета, передайте их в командлет Get-Member.To fully understand the output of that cmdlet, pipe its output to the Get-Member cmdlet.Например, следующая команда отображает сведения об элементах выходных данных объекта с помощью командлета Get-Service.For example, the following command displays information about the members of the object output by the Get-Service cmdlet.

ConsistencyConsistency

Управление системами может оказаться непростой задачей, а средства с согласованным интерфейсом помогают справляться с такими трудностями.Managing systems can be a complex endeavor and tools that have a consistent interface help to control the inherent complexity.К сожалению, согласованность не обеспечивают ни программы командной строки, ни COM-объекты сценариев.Unfortunately, neither command-line tools nor scriptable COM objects have been known for their consistency.

Согласованность Windows PowerShell является одним из его важнейших преимуществ.The consistency of Windows PowerShell is one of its primary assets.Например, если вы научитесь использовать командлет Sort-Object, эти знания можно применить для сортировки выходных данных любого командлета.For example, if you learn how to use the Sort-Object cmdlet, you can use that knowledge to sort the output of any cmdlet.Вам не нужно изучать разные процедуры сортировки для каждого командлета.You do not have to learn the different sorting routines of each cmdlet.

Кроме того, разработчикам командлетов не нужно проектировать возможности сортировки для своих командлетов.In addition, cmdlet developers do not have to design sorting features for their cmdlets.Windows PowerShell дает им платформу, которая предоставляет основные возможности и обеспечивает соответствие по многим аспектам интерфейса.Windows PowerShell gives them a framework that provides the basic features and forces them to be consistent about many aspects of the interface.Платформа частично лишает разработчиков свободы выбора, а взамен существенно упрощает разработку удобных и надежных командлетов.The framework eliminates some of the choices that are typically left to the developer, but, in return, it makes the development of robust and easy-to-use cmdlets much simpler.

Интерактивные среды и среды сценариевInteractive and Scripting Environments

Windows PowerShell — это объединенная интерактивная среда сценариев, которая предоставляет доступ к программам командной строки и COM-объектам, а также позволяет использовать возможности библиотеки классов .NET Framework.Windows PowerShell is a combined interactive and scripting environment that gives you access to command-line tools and COM objects, and also enables you to use the power of the .NET Framework Class Library (FCL).

Эта среда улучшает работу с командной строкой Windows, которая предоставляет интерактивную среду с несколькими программами командной строки.This environment improves upon the Windows Command Prompt, which provides an interactive environment with multiple command-line tools.Она также улучшает работу сценариев сервера сценариев Windows, которые позволяют использовать несколько программ командной строки и COM-объекты автоматизации, но не предоставляют интерактивную среду.It also improves upon Windows Script Host (WSH) scripts, which let you use multiple command-line tools and COM automation objects, but do not provide an interactive environment.

Объединяя доступ ко всем этим функциям, Windows PowerShell расширяет возможности интерактивного пользователя и разработчика сценариев, а также упрощает администрирование системы.By combining access to all of these features, Windows PowerShell extends the ability of the interactive user and the script writer, and makes system administration more manageable.

Ориентация на объектыObject Orientation

Хотя для взаимодействия с Windows PowerShell используются команды в текстовой форме, Windows PowerShell основан на объектах, а не тексте.Although you interact with Windows PowerShell by typing commands in text, Windows PowerShell is based on objects, not text.Выходные данные команды — это объект.The output of a command is an object.Его можно отправить в другую команду в качестве входных данных.You can send the output object to another command as its input.В результате Windows PowerShell предлагает привычный интерфейс для пользователей, знакомых с другими оболочками, а также представляет новую и эффективную концепцию командной строки.As a result, Windows PowerShell provides a familiar interface to people experienced with other shells, while introducing a new and powerful command-line paradigm.Он расширяет возможности передачи данных между командами, позволяя отправлять объекты, а не текст.It extends the concept of sending data between commands by enabling you to send objects, rather than text.

Легкий переход к сценариямEasy Transition to Scripting

Windows PowerShell облегчает переход от интерактивного ввода команд к созданию и выполнению сценариев.Windows PowerShell makes it easy to transition from typing commands interactively to creating and running scripts.Можно ввести команды в командной строке Windows PowerShell, чтобы найти команды, выполняющие какую-либо задачу.You can type commands at the Windows PowerShell command prompt to discover the commands that perform a task.Затем эти команды можно сохранить в записи или журнале, прежде чем скопировать их в файл для использования в качестве сценария.Then, you can save those commands in a transcript or a history before copying them to a file for use as a script.

.

.

Бывает необходимость в использование Powershell для работы с текстом.

Для примера возьмем текстовый файл test.txt:

#———————————–

#digitalbears.net example of text file editing

Clear-Host                                                   #Просто очистим экран

Get-Content .test.txt                                 #Посмотрим что в файле есть

“First Sting

“Second “String”

Теперь давайте попробуем удалить кавычки и сохранить изменение в файл:

#———————————–

#digitalbears.net example of text file editing

Clear-Host                                                          #Просто очистим экран

Get-Content .test.txt                                        #Посмотрим что в файле есть

$text= Get-Content .test.txt                            #Создадим переменную

$text -replace (‘”‘), ” | Out-File .test.txt      #Заменим символ ” на пустое значение, тоесть удалим их

First Sting

Second String

Вот пример создания файла, заполнение его контентом, а после дополнение:

#—————————————-

#digitalbears.net creating text file and add content

Clear-Host                                                                                        #Просто очистим экран

New-Item .test2.txt -Type File                                                     #Создадим пустой файл test2.txt

Set-Content .test2.txt -Value “First Stringn означает что все после этого знака начнется с новой линии

Add-Content -Value “Third String” -Path .test2.txt                #Добавим еще одну строчку

Get-Content .test2.txt                                                                  #Посмотрим что получилось

Directory: H:

Mode                LastWriteTime     Length Name

—-                ————-     —— —-

-a—         10/4/2012  11:31 AM          0 test2.txt

First String

Second String

Third String

Хотелось бы еще сказать что есть короткие алиасы на команды, например для Set-Content есть sc, а для Get-Content gc.

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

Mikhail Tokarev.


Хотя это может не работать в вашем случае (поскольку вы предоставляете информационный результат пользователю), создайте строку, которую вы можете использовать для добавления вывода. Когда пришло время вывести его, просто введите строку.

Игнорируя, конечно, что этот пример глуп в вашем случае, но полезен по понятию:

Вывод:


Вы просто не можете заставить PowerShell опустить эти надоедливые символы новой строки … Нет сценария или командлета. Разумеется, Write-Host — это абсолютная бессмыслица, потому что вы не можете перенаправлять / транслировать из нее!

Тем не менее, вы можете написать свой собственный EXE-файл, чтобы сделать это, что я объяснил, как это сделать в вопросе переполнения стека. Как вывести что-то в PowerShell .


Проблема, с которой я столкнулась, заключалась в том, что Write-Output фактически выводит строки на выходе при использовании PowerShell v2, по крайней мере, в stdout. Я пытался написать XML-текст в stdout без успеха, потому что это было бы сложно обернуть на персонаже 80.

Обходной путь состоял в том, чтобы использовать

Это не проблема в PowerShell v3. Кажется, что там работает «Write-Output».

В зависимости от того, как вызывается сценарий PowerShell, вам может потребоваться использовать

перед тем, как вы напишите в stdout.


Ответ Шуфлера правильный. Иными словами: вместо передачи значений в Write-Output с использованием ARRAY FORM,

или эквивалент несколькими вызовами Write-Output,

сначала объедините ваши компоненты в STRING VARIABLE:

Это предотвратит промежуточные CRLF, вызванные вызовом Write-Output несколько раз (или ARRAY FORM), но, конечно, не будет подавлять окончательный CRLF командлета Write-Output. Для этого вам нужно будет написать свой собственный комманд, использовать один из других запутанных обходных решений, перечисленных здесь, или дождаться, пока Microsoft решит поддержать параметр для Write-Output.

Ваше желание предоставить текстовый индикатор прогресса на консоль (т. Е. «….»), в отличие от записи в файл журнала, также должно быть удовлетворено с помощью Write-Host. Вы можете выполнить оба, собирая текст msg в переменную для записи в журнал AND, используя Write-Host, чтобы обеспечить прогресс в консоли. Эта функциональность может быть объединена в ваш собственный командный файл для лучшего повторного использования кода.


Следующее поместит курсор в начало предыдущей строки. Вам решать разместить его в правильном горизонтальном положении (используя $ pos.X, чтобы переместить его в сторону):

Ваш текущий выход составляет 27 пробелов, поэтому $ pos.X = 27 может работать.


Write-Host ужасен, разрушитель миров, но вы можете использовать его только для отображения прогресса пользователю при использовании Write-Output для журнала (не то, что OP запросил для ведения журнала).


Добавить комментарий

Закрыть меню