Power shell и его возможности в уходящем году

read text file powershell

In this comprehensive guide, we’ll walk through the steps necessary to read a text file using PowerShell. So, let’s get started and uncover the secrets of reading text files in this powerful scripting language.

Introduction to PowerShell’s Get-Content Command

PowerShell, a command-line shell and scripting language, provides a wide range of cmdlets and methods to read and manipulate text files. Whether you need to process log files, analyze text data, or extract information from configuration files, PowerShell has you covered. By leveraging the power of its built-in cmdlets and scripting capabilities, you can efficiently read and parse text files with ease. The Get-Content command is a cmdlet in Windows PowerShell that enables you to read the content of a file and store it in a variable or display it in the console.

Understanding the Basics of Reading Text Files in PowerShell

How to Read a Text File in PowerShell

Before we dive into the specifics of the Get-Content command, it’s essential to understand the basics of reading text files in PowerShell. PowerShell supports various file formats, including text files, XML files, CSV files, and JSON files. To read a text file in PowerShell, you need to specify the path to the file. You can use either the absolute or relative path to the file. The absolute path specifies the full path to the file, starting from the root of the drive, while the relative path specifies the path to the file relative to the current location.

Reading a Text File Using Get-Content Command

The Get-Content command is the most common way to read a text file in PowerShell (PowerShell cat equivalent). Here is the basic syntax of the Get-Content cmdlet:

Get-Content 
[-Path] <string[]> 
[-Raw] [-Encoding <Encoding>] 
[-AsByteStream] 
[-Exclude <string[]>] 
[-Filter <string>] 
[-Force] 
[-Credential <PSCredential>]
[-Include <string[]>] 
[-ReadCount <long>] 
[-Tail <int>] 
[-TotalCount <long>] 
[-Wait] 
[-Delimiter <string>] 
[-Stream <string>]
[<CommonParameters>]

To use the Get-Content command in your PowerShell script, specify the path to the file and assign the output to a variable or display it in the PowerShell console.

Get-Content -Path "C:\Logs\AppLog.txt"

This command reads the content of the single file “AppLog.txt” file in the C:\Logs directory from path parameters and returns each line as a string object (or string array). The -Path parameter is used to specify the path to an item where this cmdlet gets the content. You can supply Wildcard characters, such as *.txt, to get content from multiple files for the path element.

PowerShell Read Text file

Similarly, you can get content from multiple files with * (asterisk) character and the parameter -filter. Here is the syntax of the filter:

Get-Content -path "C:\Logs\*" -Filter *.log -Force

Reading a Text File into a Variable Using Get-Content Command

The Get-Content command not only displays the content of a file in the console, but also enables you to store the content in a variable. Storing the content in a variable allows you to manipulate and perform various operations on the data.

$content = Get-Content -path C:\Logs\log.txt

Use the -Raw parameter to get the entire content of the file as a single string, rather than an array of strings. If the file path includes any escape characters, enclose it with a single quotation mark. You can also use the alias cat for get-content cmdlet.

Reading a Text File Line by Line in PowerShell using Get-Content

Sometimes, you may need to read a text file line by line in PowerShell. This can be useful when you’re working with large files, and you only need to process one line at a time. PowerShell offers the Get-Content cmdlet, which allows you to retrieve the contents of a file and process each line individually.

This command reads the log.txt file one line at a time and displays each line in the console. You can also assign the output to a variable, as shown below. Let’s traverse through the text file’s contents line by line:

$FilePath = "C:\Logs\AppLog.Log"
$FileContents = Get-Content -Path $FilePath

$i = 1
# Read the file line by line
ForEach ($Line in $FileContents) {
    # Process each line here
    Write-Host "Line# $i :" $Line
    $i++
}
read file powershell

Similarly, you can use the StreamReader class to read the file one line at a time. Here’s an example using StreamReader:

$Reader = New-Object System.IO.StreamReader("C:\Logs\LogFile.log")

while($Line = $Reader.ReadLine()) {
    # do something with each line
    Write-host $Line
}

$Reader.Close()

This code creates a new instance of the StreamReader class and uses a while loop to read each line until there are no more lines left. Make sure to close the StreamReader object when you’re done reading from it.

Search and Filter File Contents

In addition to monitoring log files in real-time, PowerShell allows you to filter log entries based on specific criteria. This can be achieved by combining the Get-Content cmdlet with other cmdlets, such as Where-Object or Select-String. Here’s an example:

$FilePath = "C:\Logs\log.txt"
$keyword = "ERROR"
Get-Content -Path $FilePath | Where-Object { $_ -like "*$keyword*" }

In this example, we get the content of the log file and the Where-Object cmdlet to filter the file entries based on a specific keyword, in this case, “ERROR”. You can also use regular expression to search and filter a specific pattern.

$LogFile = "C:\Logs\Log.txt"
$Pattern = "ERROR|WARNING"  # RegEx pattern to filter log messages

# Filter log file contents based on the pattern
$FilteredLines = Get-Content -Path $LogFile | Select-String -Pattern $pattern

# Display the filtered lines
$FilteredLines.Line

Get the First or Last “N” Lines of a Text file

Get-Content -Path "C:\Logs\Log.txt" -TotalCount 2

You can also read the first “N” lines using the Select-Object cmdlet. E.g.

Get-Content -Path "C:\Logs\log.txt" | Select-object -First 5

Use the parameter -Tail to get the last “N” lines from the end of a file. E.g.

Get-Content C:\Logs\log.txt -Tail 5

This command reads the last line of the content. You can also pipeline the Get-content to Select-Object cmdlet to read the last line of the file. E.g.,

Get-Content -Path "C:\Logs\log.txt" | Select-object -last 5

Reading Specific Lines of a Text File

Sometimes, you may only need to read specific lines from a text file, such as extracting header information or retrieving data from a specific line number. PowerShell provides several methods to achieve this. To read a specific line number from a text file, you can use the Select-Object cmdlet with the -Index parameter. Here’s an example:

$FilePath = "C:\Logs\Log.txt"
$LineNumber = 5
Get-Content -Path $FilePath | Select-Object -Index ($LineNumber-1)

In the above code, we specify the path to the text file and the desired line number (fifth line). The Select-Object cmdlet with the -Index parameter then selects the line at the specified index number and outputs it. You can also wrap the Get-Content inside parentheses, so that the command completes before going to the next step.

(Get-Content -Path "C:\Logs\Log.txt" -TotalCount 5)[-1]

When processing text files, it’s common to encounter files with header or footer lines that need to be skipped. PowerShell allows you to skip these lines using the Select-Object cmdlet with the -Skip parameter. Here’s an example:

$FilePath = "C:\Logs\Log.txt"
$HeaderLines = 1 #skip the first line
$FooterLines = 1

#Get contents of the file and skip certain lines
Get-Content -Path $FilePath | Select-Object -Skip $headerLines | Select-Object -SkipLast $footerLines

In this example, we specify the path to the text file and the number of header and footer lines to skip. The Select-Object cmdlet with the -Skip parameter skips the specified number of lines from the beginning of the file, while the -SkipLast parameter skips the specified number of lines from the end of the file.

Reading the Content of a File Using Streamreader in PowerShell

The System.IO.StreamReader class is a powerful way to read the content of a file in PowerShell. The StreamReader class can read files of any size and can be used to read files in any format. However, using the StreamReader class requires a bit more code than using the Get-Content command.

$stream = New-Object System.IO.StreamReader("C:\Logs\log.txt")
$content = $stream.ReadToEnd()
$stream.Close()
$FileContent = [System.IO.File]::ReadAllText("C:\Logs\log.txt")

In this example, we use the ReadAllText method to read the entire content of the file located at “C:\Logs\log.txt”. The content is then stored in the $FileContent variable, and it can be used for further processing or display.

Reading Large Text Files in PowerShell

When dealing with large text files, reading the entire file into memory at once may not be feasible due to memory constraints. PowerShell provides techniques to efficiently read large text files in a more optimized manner.

Using the -ReadCount Parameter

The -ReadCount parameter of the Get-Content cmdlet allows you to read a specified number of lines at a time, reducing the memory footprint when processing large text files. By specifying a larger value for -ReadCount, you can read multiple lines in each iteration, improving the overall performance.

Get-Content -Path <file-path> -ReadCount <number-of-lines>

Specify the value of the read count parameter to the number of lines you want to retrieve from the contents of an item. Here’s an example:

$FilePath = "C:\Logs\Log.txt"
$i = 1
$ReadCount = 50

Get-Content -Path $FilePath -ReadCount $readCount | ForEach-Object {
    Write-host "Iteration":$i
    # Process each block of lines here
    $_  # Output the block of lines
    $i++
}

Reading Chunk by Chunk using StreamReader

Another approach to reading large text files efficiently is to read the file in chunks using the StreamReader class from the .NET Framework. Here’s an example:

$FilePath = "C:\Logs\logFile.txt"
$bufferSize = 4096 #Bytes

$StreamReader = [System.IO.StreamReader]::new($FilePath)
$Buffer = New-Object char[] $bufferSize
$ReadChars = $streamReader.Read($buffer, 0, $bufferSize)

while ($readChars -ne 0) {
    # Process the chunk of data here
    $chunk = [string]::new($buffer, 0, $readChars)
    Write-Host -f Green "Processed chunk with $readChars characters"
    $chunk
    
    # Read the next chunk of data
    $readChars = $streamReader.Read($buffer, 0, $bufferSize)
}

$streamReader.Close()

In this example, we create a new instance of the StreamReader class, specifying the path to the text file and the buffer size in bytes. The while loop continues reading the file line by line until the end of the stream is reached. Each line, or chunk, can then be processed within the loop.

Read CSV, JSON, and XML Files in PowerShell

Here are some examples of using the Get-Content method to read content from CSV, JSON, and XML files in PowerShell:

Get Content from CSV files

If you are working with structured data in CSV format, PowerShell offers the ConvertFrom-Csv cmdlet in combination with Get-Content to read CSV files. This cmdlet automatically detects the delimiter and creates objects for each row, making it convenient to access and process the data. Here’s an example:

$Data = Get-Content -Path "C:\path\to\file.csv" | ConvertFrom-csv

In this example, we specify the path to the CSV file and use the Get-Content cmdlet to read the file. The resulting data is stored in the $data variable as a collection of objects, with each object representing a row in the CSV file. You can also use the native method Import-CSV to read a CSV file in PowerShell!

Reading a JSON file

To read a JSON file in PowerShell, you can use the Get-Content cmdlet to read the file content and then use the ConvertFrom-Json cmdlet to convert the JSON data into PowerShell objects. Here’s an example:

$Data = Get-Content -path "C:\Temp\data.json" -Raw | ConvertFrom-Json

#Display a specific property from the JSON data
Write-Host "Name: $($Data.Name)"

Reading an XML file:

To read an XML file in PowerShell, you can use the Get-Content cmdlet to read the file content and then convert it to an XML object using the type accelerator.

$Data = [xml](Get-Content -path "C:\Temp\data.xml" -Raw)

#Get a specific node value from the xml
Write-Host $Data.SelectSingleNode("//note//from").InnerText

Common Errors While Using the Get-Content cmdlet in PowerShell

While using the Get-Content command, you may encounter some common errors. Here are some of the most common errors and how to fix them:

  • Cannot find the file specified:
:/>  Файлы открываются с одного клика

This error occurs when the file’s path is incorrect. Double-check the path and ensure that the file exists in the specified location.

  • The file is in use by another process:

This error occurs when the file is opened in another program. Close the program and try again.

  • The file is too large:

This error occurs when the file is too large to be read into memory. Use the -ReadCount parameter to read the file line by line.

Best Practices for Using Get-Content Command in PowerShell

Here are some best practices for using the Get-Content command in PowerShell:

  • Always specify the path to the file using the absolute or relative path.
  • Optimizing Memory Usage – Use the -ReadCount parameter when working with large files. Reading large text files can consume a significant amount of memory.
  • Store the content in a variable to manipulate the data and perform various operations on it.
  • Error Handling and Logging – When reading text files, it’s crucial to implement proper error handling and logging mechanisms. PowerShell provides various error handling techniques, such as erroraction, try-catch blocks and error action preferences.
  • Use the ConvertFrom-* cmdlets when working with CSV, JSON, and XML files.

Conclusion

With the examples provided in this article, you should now have a good understanding of how to read text files in PowerShell and can apply this knowledge to your own scripts and automation workflows!

What does Get-Content do in PowerShell?

Get-Content retrieves the content of the item at the specified location, such as a file or a registry key. By default, it returns the content as an array of strings, one per line.

How do I compare file contents in PowerShell?

To compare file contents in PowerShell, you can use the Get-Content cmdlet to retrieve the contents of each file and then use the Compare-Object cmdlet to compare the contents. Here is an example:
#Read content of file1 and file2
$content1 = Get-Content -Path "C:\Logs\Log1.txt"
$content2 = Get-Content -Path "C:\Logs\Log2.txt"
#Compare the file contents
Compare-Object -ReferenceObject $content1 -DifferenceObject $content2

How do you loop through each line of a file in PowerShell?

How to get the content of a file as a string in PowerShell?

To get the content of a file as a string in PowerShell, you can use the Get-Content cmdlet and specify the file path. Here’s an example:
$Content = Get-Content -Path "C:\Logs\log.txt"

How do you loop through files in a folder in PowerShell?

How to find a string in file content in PowerShell?

What is Get-Content used for?

The Get-Content cmdlet retrieves the content of a file at a specified location. This content is typically text, but can also be other data types depending on the item.

Can Get-Content read multiple files at once?

Yes, Get-Content can read multiple files by specifying each file path or using wildcards. For example, Get-Content C:\logs\*.log reads all .log files in the specified directory.

Can I use Get-Content to monitor changes to a file in real-time?

Yes, the -Wait parameter allows you to monitor changes to a file in real-time. For example, Get-Content C:\logs\app.log -Wait continues to display new content as it’s added to app.log.

How do I get the content of a file using a specific encoding?

Use the -Encoding parameter to specify the encoding. For example, Get-Content C:\path\to\file.txt -Encoding UTF8 reads the file using UTF-8 encoding. You can specify any other encodings, such as: Ascii, Unicode, UTF8, etc.

How do I get the content of a file excluding specific files?

To get the content of a file excluding specific files, use the -Exclude parameter with the Get-Content cmdlet:
Get-Content -Path "C:\Temp\logs*" -Exclude *.txt

While working with files in PowerShell, you may get requirements to check if a file contains a specified string. PowerShell provides different methods to check if a file contains a string. Let us check each method with examples.

To check if a file contains a specific string in PowerShell, you can use the Select-String cmdlet with the -Pattern parameter specifying your search term, and the -Path parameter to define the file’s location. For a simple true or false return, add the -Quiet switch. For example: $containsString = Select-String -Path “C:\MyFolder\MyFile.txt” -Pattern “searchTerm” -Quiet will return True if “searchTerm” is found, otherwise False.

I am using Visual Studio code to execute all the PowerShell scripts. You can also use Windows PowerShell ISE to execute the examples.

And for each method, I will take a .txt file.

Now, let us check various methods of PowerShell to check if a file contains a specific string.

1. Using the Select-String Cmdlet

The Select-String cmdlet in PowerShell is similar to the grep command in Unix or Linux. This command you can use to search for text patterns within files. It uses regular expression matching to search for text patterns in input strings and files.

Here’s a simple example of how to use Select-String in PowerShell to check if a file contains a specific string.

Select-String -Path "C:\MyFolder\MyFile.txt" -Pattern "powershellfaqs"

This command searches for the string “powershellfaqs” in the file “MyFile.txt” located in “C:\MyFolder”. If the string is found, Select-String will return the line or lines containing the string, along with some additional context information.

The screenshot below shows that this file contains the string twice and displays both lines.

Check if a File Contains a String in PowerShell

2. Check for a String in Multiple Files in PowerShell

Sometimes, you may want to check for a sting in all the files in the folder, and this is easy to do in PowerShell.

To check for a specific string across multiple files in PowerShell, you can combine Get-ChildItem with Select-String:

Get-ChildItem -Path "C:\MyFolder\*.txt" | Select-String -Pattern "powershellfaqs"

This script searches for “powershellfaqs” in all text files within “C:\MyFolder”. It lists any files containing the string, along with the lines where the string was found.

3. Using the -Quiet Switch

This is another simple method if you just want to know if the string is presented in the file or not in PowerShell. It just returns true or false.

If you only need to know whether the string exists in the file and don’t need to see the specific lines, you can use the -Quiet switch in PowerShell. This will return a boolean value: True if the string is found, and False otherwise.

$containsString = Select-String -Path "C:\MyFolder\MyFile.txt" -Pattern "powershellfaqs" -Quiet
$containsString

Here, you can see the output in the screenshot below; it returns true as the string is presented in the file.

How to Check if a File Contains a String in PowerShell

4. Checking if a String Exists with -match Operator

Here is also another method to check if a string exists within a file is to use the -match operator in PowerShell. First, you’ll need to read the file content into a variable and then use -match to search for the string.

$content = Get-Content -Path "C:\MyFolder\MyFile.txt"
$containsString = $content -match "powershellfaqs"

This approach is useful when you want to perform additional operations on the file content after checking for the string.

5. Using .Contains() Method

This is another simple method to check if a string contains in a file in PowerShell. In PowerShell, you can use the .Contains() method on a string object. After reading the file into a variable, you can check if the string contains your specified term.

$content = Get-Content -Path "C:\MyFolder\MyFile.txt" -Raw
$containsString = $content.Contains("powershellfaqs")

Note that .Contains() is case-sensitive. For a case-insensitive search, you can convert both the content and the search term to the same case using .ToLower() or .ToUpper().

Here is the PowerShell script for case-insensitive search.

$content = Get-Content -Path "C:\MyFolder\MyFile.txt" -Raw
$lowercaseContent = $content.ToLower()
$containsString = $lowercaseContent.Contains("powershellfaqs".ToLower())

6. Using -like Operator with Wildcards

In PowerShell, the -like operator allows you to use wildcards for pattern matching. This can be useful when you want to check if a string contains a specific word or pattern.

$content = Get-Content -Path "C:\MyFolder\MyFile.txt"
$containsString = $content -like "*powershell*"

The asterisks * are wildcards that represent any number of characters. This command will return True if “powershell” is found anywhere in the content.

7. Using Regular Expressions

In PowerShell, you can also use regular expressions to do a pattern-matching search. You can use regular expressions with Select-String. This allows you to search for complex patterns within the text.

Select-String -Path "C:\MyFolder\MyFile.txt" -Pattern "powershell\w+"

Conclusion

PowerShell provides several methods to check if a file contains a specific string or pattern. In this PowerShell tutorial, I have explained with examples how to check if a file contains a string using the below methods:

  1. Using the Select-String Cmdlet
  2. Check for a String in Multiple Files in PowerShell
  3. Using the -Quiet Switch
  4. Checking if a String Exists with -match Operator
  5. Using .Contains() Method
  6. Using -like Operator with Wildcards
  7. Using Regular Expressions

You may also like:

Quick Links

Key Takeaways

  • To save a PowerShell command’s output to a TXT file, type the command, press Spacebar, type the > (greater than) symbol, press Spacebar, and type the full path to the TXT file.
  • To generate a CSV file from a PowerShell command, type your command, press Spacebar, type the | (pipe) sign, press Spacebar, type “Export-CSV”, press Spacebar, enter the full path to the CSV file, press Spacebar, type “-NoTypeInformation”, and press Enter.

Do you want to save your PowerShell command’s result in a TXT (text) or CSV (comma-separated values) file on your computer? If so, it’s easy to do, and we’ll show you how on your Windows 11 or Windows 10 PC.

Send a PowerShell Command’s Output to a Text File

To write your PowerShell command’s output to a text (TXT) file, first launch a PowerShell window. Here, type whatever command you need, the output of which you want in a text file. After you’ve typed the command, press Spacebar, type the > (greater than) symbol, press Spacebar, enter the full path to the text file where you want to save the output, and press Enter.

systeminfo > C:\Users\mahes\Desktop\SystemInfo.txt
Power shell и его возможности в уходящем году

As soon as you press Enter, PowerShell creates your specified file and adds your command’s result to it. When that’s done, access your specified path, and you’ll find your newly created file there.

:/>  Ключ window 10 | Лицензионный ключ windows 10 - рабочие

Send a PowerShell Command’s Output to a CSV File

If you want to create a CSV file containing the output of your specified PowerShell command, use the tool’s “Export-CSV” cmdlet.

Get-ChildItem | Export-CSV C:\Users\mahes\Desktop\List.csv -NoTypeInformation
Power shell и его возможности в уходящем году

When you’ve finished running the command, you’ll have a file called “List.csv” on your desktop containing the list of the items in your current directory.

View Your Text or CSV File’s Contents in PowerShell

You can view your newly created text or CSV file’s contents right inside PowerShell. You don’t have to leave the tool and use another app to open your files.

Type PATH
Type C:\Users\mahes\Desktop\SystemInfo.txt
A TXT file's contents displayed in PowerShell using the 'Type' command.

Instantly, PowerShell will load your file’s contents in your open window, allowing you to read the file content.


And that’s all there is to know about saving your PowerShell command results in text or CSV files. Enjoy!

In this “small” tutorial, I will explain how to create a text file in Powershell and then how to write content in it.

In this tutorial, we will see 4 Powershell Cmdlets:

  • New-item : which will be used to create the text file.
  • Set-Content :which writes to the file.
  • Add-Content : allows you to add content
  • Get-Content : which displays the contents of the file

We will start by creating the file.

New-Item TextFile.txt
Power shell и его возможности в уходящем году

Here the file is created in the current folder, it is possible to put an absolute path.

The creation of a file is very simple and is done simply with the Cmdlet New-Item indicating the path / name of the file.

Now, we will see how to add content with the Cmdlets Set-Content and Add-Content. The main difference between the two commands is that Set-Content will first delete the file and then add the content, while the Add-Content command will add the content at the end of the file.

To add content to an empty file or replace content:

Set-Content TextFile.txt "Content to add in the text file"
Power shell и его возможности в уходящем году

The command has no particular return.

To add content to the end of the file:

Add-Content TextFile.txt "Content to add in the text file"
Power shell и его возможности в уходящем году

Again, the command has no return.

Using the Get-Content cmdlet, we can see the contents of the file:

Get-Content TextFile.txt
Power shell и его возможности в уходящем году

You now know how to write to a file with PowerShell.

Создание и чтение текстовых файлов в командной строкеЕсли вы оказались без доступа к чему-либо кроме командной строки или Windows PowerShell и по какой-то причине вам требуется возможность создания или чтения текстовых файлов, это вполне реализуемо, причем более чем одним методом.

В этой инструкции подробно о работе с текстовыми файлами в командной строки или PowerShell (разумеется, можно и в Терминале Windows) — создание и сохранение текстовых файлов, их вывод и чтение в консоли. Если вам требуется вывести результаты выполнения команды в файл, вы можете использовать отдельную инструкцию на эту тему.

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

Возможность создания текстовых файлов доступна как в командной строке (cmd.exe), так и в PowerShell. Начнем с первого варианта.

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

Команда ECHO

echo Содержимое текстового файла > file.txt

В результате её выполнения в текущей рабочей папке командной строки будет создан файл с именем file.txt и содержимым «Содержимое текстового файла».

Создание текстового файла с помощью команды echo

COPY CON

Команда copy с параметром con позволяет скопировать содержимое консоли в файл. Использование возможности будет состоять из следующих шагов:

  1. Введите команду
    copy con имя_файла.txt

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

  2. Курсор переместится на строчку ниже, и вы сможете набирать текст так, как делаете это обычно, включая перенос строки. Создание текстового файла с помощью copy con
  3. Для завершения набора и сохранения текстового файла нажмите сочетание клавиш Ctrl+Z, а затем — Enter. Это добавит отметку конца файла и сохранит его в текущей папке с указанным на 1-м шаге именем. Сохранение текстового файла с помощью copy con

Создание текстового файла в PowerShell

PowerShell также имеет набор встроенных командлетов для сохранения текстовых данных в файл.

Out-File

Использование Out-File в PowerShell по своей функциональности сходно с оператором перенаправления вывода в командной строке. Вывод консоли перенаправляется в заданный файл.

"Текстовая строка" | Out-File -FilePath .\file.txt

В этом примере в текущей папке PowerShell будет создан файл с именем file.txt и содержимым «Текстовая строка».

New-Item

Создание нового текстового файла в PowerShell возможно с помощью командлета New-Item. Пример команды, в которой создается текстовый файл file.txt, содержащий «Текстовая строка» в текущем расположении:

New-Item -Path . -Name "file.txt" -ItemType "file" -Value "Текстовая строка"

Создание текстового файла с помощью New-Item в PowerShell

Set-Content и Add-Content

Ещё два командлета PowerShell для работы с текстовыми файлами:

  • Set-Content — перезаписывает содержимое файла
  • Add-Content — добавляет содержимое в конце выбранного файла

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

Add-Content -Path .\file.txt -Value "Ещё одна текстовая строка"

Добавление текста к файлу в PowerShell

Вывод (чтение) текстового файла в командной строке и PowerShell

Теперь перейдем к способам просмотреть текстовые файлы в командной строке или PowerShell. Как и в предыдущем случае, учитывайте, что для файлов, содержащих кириллицу, возможны проблемы с отображением символов в правильной кодировке.

TYPE

Самый простой вариант — использование команды TYPE с указанием пути к файлу, который нужно отобразить в консоли, например:

type file.txt

Вывод текстового файла с помощью команды type

MORE

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

more file.txt

Выполнив команду, вы увидите часть содержимого текста, которая помещается в окне консоли, далее вы можете использовать следующие клавиши:

Вывод текстового файла с помощью команды more

  • Enter — для отображения следующей строки файла.
  • Пробел — для отображения следующих строк документа, которые поместятся в активное окно консоли.
  • P — Показать следующие N строк. После нажатия этой клавиши с последующим указанием количества строк, будет выведено соответствующее количество строк текстового документа.
  • S — пропустить следующие N строк, работает аналогично предыдущему варианту.
  • Клавиша «=» — для отображения текущего номера строки.
  • Q — для прекращения выполнения команды more.

Get-Content

Вывести содержимое текстового файла в PowerShell можно с помощью Get-Content с указанием пути к файлу, например:

Get-Content file.txt

Чтение текстового файла с помощью Get-Content в PowerShell

Также вы можете выводить определенные строки файла, с помощью команд вида (вывод первых или последних 10 строк соответственно):

Get-Content file.txt | Select-Object -First 10
Get-Content file.txt | Select-Object -Last 10

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

$file_text = Get-Content file.txt
$file_text[2]

Текстовый редактор edit.com в Windows

Помимо использования ручного ввода команд, вы можете использовать консольные текстовые редакторы — сторонние в версиях для Windows, такие как Vim, Nano, Kinesics Text Editor или даже старый встроенный edit.com (может отсутствовать в вашей версии системы и требовать патча NTVDMx64).

В Windows 10 возможность сохранения результатов команды PowerShell или командной строки в текстовом файле может оказаться полезной во многих случаях. Например, когда вы устраняете проблему, это удобный способ экспортировать и анализировать вывод команды, или вы можете поделиться выводом с кем-то, кто может помочь. Вы можете распечатать вывод команды в текстовый файл, чтобы сохранить данные конфигурации системы для целей документации и многого другого.

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

Вывод данных из командной строки в текстовый файл системы Windows

В этом уроке по Windows 10 мы расскажем, как сохранить вывод команды в текстовый файл, независимо от того, используете ли вы командную строку или PowerShell.

Как сохранить вывод командной строки в файл

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

  1. Откройте командную строку от имени администратора.
  2. Введите следующую команду, чтобы сохранить вывод в текстовый файл и нажмите : ваша-команда > c:\путь\папка\файл.txt

    В этой команде обязательно замените «ваша-команда» на ваш запрос в командной строке, а «c:\путь\папка\файл.txt» на путь и имя файла для хранения вывода.

  3. (Необязательно) Если вы хотите сохранить вывод и просмотреть результат на экране, используйте эту команду и нажмите : ваша-команда > c:\путь\папка\файл.txt | type c:\путь\папка\файл.txt

    В этой команде обязательно замените «ваша-команда» на ваш запрос в командной строке, а «c:\путь\папка\файл.txt» на путь и имя файла для хранения вывода.

    Пример данных из командной строки в текстовый файл

    Совет: если у вас возникли проблемы с просмотром файла, вы можете использовать команду после шага 3.

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

Как сохранить вывод команды в файл с помощью PowerShell

Чтобы сохранить вывод команды в текстовый файл с помощью PowerShell, выполните следующие действия:

  1. Откройте PowerShell, например, через системный поиск Windows.
  2. Введите следующую команду, чтобы сохранить вывод в текстовый файл и нажмите : ваша-команда | Out-File -FilePath c:\путь\папка\данные.txt

    В этой команде обязательно замените «ваша-команда» на нужную вам командную строку, а «c:\путь\папка\данные.txt» на путь и имя файла для хранения выходных данных.

    Вывод данных в текстовый файл с PowerShell

  3. (Необязательно) Введите следующую команду, чтобы просмотреть сохраненный вывод на экране, и нажмите : Get-Content -Path c:\путь\папка\данные.txt

    В этой команде обязательно замените «c:\путь\папка\данные.txt» на путь и имя файла с выходным содержимым.

    Вывод данных с PowerShell в текстовый файл

После выполнения шагов команда PowerShell сохранит результат в текстовый файл в указанном вами месте.

Мы ориентировались в этом руководстве на Windows 10, но вы также можете использовать эти инструкции для Windows 8.1 и Windows 7.

Windows PowerShell — программа, который объединяет в себе командную оболочку и среду для написания сценариев. Она базируется на .NET и предоставляет средства для управления компьютером и автоматизации рутинных задач. Платформа обладает функциональностью полноценного объектно-ориентированного языка, включая поддержку переменных, функций, классов и объектов.

В отличие от многих других командных оболочек, PowerShell при работе оперирует не строками, а объектами. Это позволяет разрабатывать и применять сложные логические конструкции. Важно отметить, что интерпретатор PowerShell полностью совместим со стандартными командами cmd.exe и способен выполнять их функции без ограничений.

Взаимодействие с командами осуществляется в интерактивном режиме внутри терминала. Однако, если требуется сохранить используемый скрипт, более удобным вариантом станет использование среды ISE.

Windows PowerShell ISE представляет собой интегрированное средство разработки сценариев для языка PowerShell. Здесь можно создавать, сохранять и запускать скрипты с выделением синтаксиса, автоматическим дополнением, справочником команд и инструментами отладки. PowerShell ISE является легаси-инструментом, специфичным для версий языка до 5.1 включительно. В более поздних версиях предпочтение отдается универсальным интегрированным средам разработки с плагинами.

С начала 2016 года язык получил кросс-платформенную поддержку. Теперь его можно применять не только в операционных системах Windows 7, 8, 10, и 11, но и на macOS (начиная с версии 10.13), а также на различных популярных дистрибутивах Linux (подробная информация о совместимых дистрибутивах доступна в официальной документации).

Как открыть PowerShell в Windows

Как правило, PowerShell уже установлен на вашем компьютере по умолчанию. Однако, если по какой-то причине его нет, вы можете воспользоваться инструкциями, предоставленными Microsoft. В дополнение, в официальной документации имеются подробные руководства по установке на macOS и Linux.

PowerShell является независимым от версии операционной системы инструментом и работает одинаково стабильно как на Windows 10, так и на Windows Server.

Существует два основных метода для запуска PowerShell или PowerShell ISE в системе Windows: через меню «Пуск» и с помощью приложения «Выполнить».

  • Для того чтобы открыть PowerShell через меню «Пуск», пройдите к папке Windows PowerShell, откройте её и выберите необходимое приложение. В этой директории доступны как 32-разрядные версии (отмечены как x86 в скобках), так и 64-разрядные версии терминала и ISE.
открыть PowerShell можно через Пуск
  • Чтобы запустить PowerShell через приложение «Выполнить», используйте комбинацию клавиш Win + R. Когда появится окно, введите powershell или powershell ise (в зависимости от того, какое приложение вам нужно) и нажмите кнопку ОК.
открытие PowerShell через команду выполнить

Команды (командлеты) PowerShell

В языке программы PowerShell команды носят название командлеты (от английского «cmdlet»). Все они формируются с использованием шаблона «Глагол-Существительное», или «Действие-Объект». Например, Get-Services и Start-Process. Благодаря такой структуре, можно легко понять предназначение команды, даже если вы с ней ещё не работали ранее.

Синтаксис командлетов

После имени самого командлета следует указание параметров и их значений. Между всеми частями команды следует проставлять пробелы. Вот пример синтаксиса командлета, который позволяет перейти в директорию C:\:

Set-Location -LiteralPath C:\ -PassThru

Разберем его на составные части:

  • Set-Location — буквально «вызвать команду». Этот командлет позволяет выполнять указанный блок сценария.
  • -LiteralPath C:\ — здесь передаем блок сценария, в котором используется команда Set-Location для перехода в каталог C:\.
  • -PassThru — по умолчанию командлет Invoke-Command не возвращает результат выполнения. Этот параметр указывает на необходимость вывода информации о местоположении, в которое был выполнен переход с помощью команды Set-Location.
переход в директорию C в powershell

Важно отметить, что регистр букв в командах PowerShell не имеет значения. Таким образом, данную команду можно записать в виде заглавных букв, строчных букв или даже смешанного регистра, и она все равно будет выполняться:

sEt-loCATion -PATH c:\ -passthru

Когда в одной строке объединены несколько команд, они разделяются точкой с запятой ;.

Иногда команда может быть слишком длинной. Для разделения на несколько строк можно использовать символ обратного апострофа ` в месте переноса. Новую строку можно создать, нажав Shift + Enter (для переноса строки ниже текущей) или Ctrl + Enter (для переноса строки выше текущей).

Разделим предыдущую команду:

Set-Location `
-LiteralPath C:\ `
-PassThru
разделение длинной команды в powershell обратным апострофом для переноса на новую строку

Алиасы

В процессе работы с терминалом иногда может быть неудобно постоянно вводить полные названия командлетов. Именно поэтому у наиболее часто используемых командлетов существуют псевдонимы (алиасы) — их сокращенные варианты.

Чтобы получить список доступных алиасов, вы можете воспользоваться командой Get-Alias. Кроме того, данной команде также доступен псевдоним gal.

список доступных алиасов в powershell

Чтобы получить список алиасов для конкретного командлета, вы можете использовать параметр -Definition. Пример:

Get-Alias -Definition Set-Location
список алиасов командлета set-location в powershell

Если вам нужно узнать полное название командлета по его алиасу, используйте параметр -Name. Этот параметр необязателен, так как он является аргументом по умолчанию.

# Оба следующих варианта эквивалентны:
Get-Alias -Name clear
Get-Alias clear
работа параметра -Name в PowerShell

Особенности обработки путей к каталогам

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

Однако, если в пути встречается пробел или другой специальный символ, PowerShell будет рассматривать его как разделитель. Например:

# Следующая команда не будет выполнена корректно
Set-Location C:\Program Files
пример некорректной команды в powershell: не удается найти позиционный параметр

PowerShell «воспринимает» пробел и интерпретирует его так, будто путь к папке закончился на слове Program, а files — это уже значение другого параметра.

Чтобы избежать подобных ситуаций, существует два метода:

  • Экранировать символы с помощью обратного апострофа `: C:\Program` Files. Однако это может быть неудобным, если путь длинный.
  • Поместить весь путь в одинарные или двойные кавычки: 'C:\Program Files' или "C:\Program Files" (желательнее использовать одинарные кавычки).

Кроме того, в PowerShell существуют сокращения для быстрого доступа к ближайшим директориям:

  • Точка . указывает на текущий каталог. Например, Get-ChildItem . позволяет просмотреть содержимое текущего местоположения.
  • Две точки .. указывают на родительский каталог. Например, Set-Location .. позволяет перейти к родительскому каталогу. Это может быть полезно, если вы находитесь в глубоко вложенной директории.

Большинство командлетов имеют параметры -Path и -LiteralPath, позволяющие указать путь к файлу или папке. Разница между ними заключается в том, что в -Path можно включать переменные, в то время как —LiteralPath интерпретирует символы буквально, даже если они содержат имя переменной.

Get-Help: как изучать новые командлеты

Для получения подробной информации о конкретном командлете воспользуйтесь командой Get-Help Название-Командлета. Пример:

Get-Help Get-Childitem
Get-Help получить информацию о командлете get-childitem в powershell

У команды Get-Help имеется несколько полезных параметров:

  • -Detailed предоставляет более подробную справку по командлету.
  • -Full предоставляет полную справку.
  • -Examples демонстрирует примеры использования командлета.
  • -Online перенаправляет пользователя на веб-страницу с соответствующей документацией.

Объекты и конвейеры (пайплайны) в PowerShell

Когда вы работаете с командлетами в PowerShell, они возвращают не просто строки, а объекты — структуры данных, содержащие набор свойств и методов. 

То, что отображается в терминале после выполнения команды в виде строки, на самом деле является визуальным представлением объекта. Программа PowerShell отображает определенные свойства объектов в виде таблицы, но далеко не все свойства могут быть отображены таким образом.

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

Пример работы конвейера в PowerShell

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

Рассмотрим пример, где вызываем запущенный процесс PowerShell:

Get-Process powershell
вызов процесса powershell

Мы получаем объект и таблицу, отображающую некоторые его свойства. Чтобы узнать все свойства и методы, давайте передадим этот объект командлету Get-Member. Для этого используется конвейер:

Get-Process powershell | Get-Member
get process и get member конвейер в powershell

Команда Get-Member получает объект от команды Get-Process и выводит таблицу со всеми его свойствами и методами. Результат работы Get-Member также представляет собой объект (точнее, список объектов), который можно передать по конвейеру дальше.

Допустим, нужно вывести только те строки, в которых MemberType равно Property. Для этого используем команду Where-Object:

Get-Process powershell | Get-Member | Where-Object {$_.MemberType -eq 'Property'}
пример работы команды Where-Object в powershell

Команда Where-Object последовательно обходит каждый объект, полученный от команды Get-Member. Выражение в фигурных скобках — логическое:

  • $_ ссылается на текущий объект (то есть на отдельную строку в таблице);
  • .MemberType обращается к значению свойства MemberType в этом объекте;
  • -eq выполняет сравнение между выражением слева и выражением справа от него;
  • 'Property' представляет значение, которое ожидаем увидеть у свойства MemberType.

Более подробно о логических выражениях рассказано ниже.

Форматирование таблиц с помощью конвейеров

Командлет Format-Table в PowerShell предоставляет возможность настроить вывод таблицы в терминале: выбирать нужные свойства и методы, устанавливать ширину столбцов, группировать данные по нескольким таблицам и т. д.

Форматируем таблицу, полученную с помощью командлета Get-Member. Следует использовать следующий синтаксис:

Get-Process powershell | Get-Member | Format-Table -AutoSize -Wrap -GroupBy MemberType -Property Name, Definition
format table в powershell - форматирование таблицы

Разберем параметры командлета Format-Table:

  • -AutoSize выравнивает ширину столбцов в соответствии с размерами их содержимого. Это позволяет оптимально использовать ширину экрана.
  • -Wrap переносит содержимое ячейки на новую строку, если оно не помещается в текущих размерах экрана. По умолчанию, если текст не помещается, он обрезается.
  • -GroupBy позволяет разделить одну таблицу на несколько, сгруппированных по значению определенного свойства. В данном случае, для каждого значения MemberType будет создана отдельная таблица.
  • -Property определяет, какие свойства объекта будут отображены в таблице в качестве столбцов. В данном примере, мы указали свойства Name и Definition.

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

Сортировка таблиц с помощью конвейеров

Командлет Sort-Object в PowerShell позволяет сортировать список объектов (таблицу) по значениям их свойств (столбцов). Давайте отсортируем результат, полученный с помощью командлета Get-Member, по столбцу Name в алфавитном порядке. Для этого  воспользуемся параметром -Property, который действует аналогично параметру у командлета Format-Table:

Get-Process powershell | Get-Member | Sort-Object -Property Name
сортировка таблиц sort-object в powershell

Командлет Sort-Object в PowerShell имеет также другие полезные параметры:

  • -Descending сортирует объекты в порядке убывания. Например:
Get-Process powershell | Get-Member | Sort-Object -Property Name -Descending
  • -Unique удаляет дубликаты и возвращает только уникальные объекты. Например:
Get-Process powershell | Get-Member | Sort-Object -Property Name -Unique
  • Параметр -Top получает число N и отображает первые N объектов в таблице. Например:
Get-Process | Sort-Object -Property CPU -Top 10
  • Параметр -Bottom получает число N и отображает последние N объектов в таблице. Например:
Get-Process | Sort-Object -Property Memory -Descending -Bottom 5

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

Фоновое выполнение команд

Определенные задачи могут требовать значительного времени на выполнение. Примеры таких задач включают установку и обновление программного обеспечения или поиск файлов в обширной директории. Важно помнить, что во время выполнения одной команды в PowerShell нельзя вводить другие команды.

Рассмотрим пример: предположим, нужно найти файл powershell.exe на всем диске C. Для этой цели  воспользуемся командлетом Get-ChildItem с параметром -Recurse. Это позволит ему искать файл не только в текущем каталоге, но и во всех его подкаталогах.

Следует учитывать, что PowerShell может столкнуться с папками, к которым у него нет доступа. Чтобы обойти возможные ошибки, добавим параметр -ErrorAction SilentlyContinue. Это означает, что в случае ошибки команда не будет генерировать уведомления, а просто продолжит выполнение.

Таким образом, данная ситуация выглядит следующим образом:

Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue
поиск файла в powershell с помощью get childitem recurse

Очевидно, что во время выполнения задачи, командная строка становится недоступной. Для принудительного прерывания выполнения задачи можно воспользоваться сочетанием клавиш Ctrl + C. Важно убедиться, что при этом ничего не выделено, чтобы избежать возможного восприятия компьютером как команды «Копировать».

Start-Job {Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue}
запуск задачи в фоновом режиме в powershell

Параллельно возможно выполнение любого числа фоновых задач. В дополнение к командлету Start-Job, предназначенному для управления фоновыми задачами, существуют и другие командлеты:

  • Get-Job предоставляет отчет о состоянии фоновых задач.
  • Wait-Job блокирует консоль до завершения фоновой задачи.
  • Stop-Job прекращает выполнение фоновой задачи.
  • Receive-Job выводит результаты выполнения фоновой задачи и очищает их из памяти. Для сохранения результатов в памяти используйте параметр -Keep.

Опции Wait-Job, Stop-Job и Receive-Job требуют указания имени Name или идентификатора Id конкретной задачи или задач (в случае нескольких). Это можно сделать непосредственно или в связке с командлетом Get-Job.

Get-Job Job1
выполнение команды get job для отчета о состоянии фоновой задачи

Работа с файлами

PowerShell предоставляет удобные средства для работы с файлами. Вот некоторые ключевые методы:

Для создания файла используйте командлет New-Item с указанием пути к файлу:

New-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -ItemType File

Чтобы записать данные в файл, используйте Out-File или Set-Content:

"Содержимое файла" | Out-File -FilePath "C:\путь\к\файлу\новыйфайл.txt"
Set-Content -Path "C:\путь\к\файлу\новыйфайл.txt" -Value "Новое содержимое файла"

Для чтения содержимого файла в массив используйте Get-Content:

$содержимое = Get-Content -Path "C:\путь\к\файлу\новыйфайл.txt"

Для получения информации о файле (размер, дата создания и др.) используйте Get-Item:

$информацияОФайле = Get-Item -Path "C:\путь\к\файлу\новыйфайл.txt"

Для копирования файла в другое место используйте Copy-Item:

Copy-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -Destination "C:\путь\к\копия\новыйфайл.txt"

Для удаления файла воспользуйтесь командлетом Remove-Item:

Remove-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -Force

Помните, что операции удаления файлов необратимы, поэтому будьте осторожны при их использовании.

Оставьте комментарий