Skip to content

Latest commit

 

History

History
610 lines (505 loc) · 47 KB

README_powershell.md

File metadata and controls

610 lines (505 loc) · 47 KB

Ограничение выполнения скриптов .ps1

В powershell:

PS C:\mineprog\mctools\mcpi> Scripts\Activate.ps1
Scripts\Activate.ps1 : Невозможно загрузить файл C:\mineprog\mctools\mcpi\Scripts\Activate.ps1, так как выполнение сцен
ариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.
microsoft.com/fwlink/?LinkID=135170.
строка:1 знак:1
+ Scripts\Activate.ps1
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Ошибка безопасности: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

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

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

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

  • Изменить политику выполнения (менее безопасный вариант): Вы можете временно изменить политику выполнения PowerShell, чтобы разрешить выполнение скриптов. Для этого запустите PowerShell с повышенными правами, откройте командную строку или PowerShell от имени администратора и выполните следующую команду:
Set-ExecutionPolicy RemoteSigned

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

Set-ExecutionPolicy Default
  • Запустить скрипт как модуль (более безопасный вариант): Вместо запуска скрипта напрямую, попробуйте его импортировать как модуль:
Import-Module .\Scripts\Activate.ps1

Чтобы запустить PowerShell с правами администратора из командной строки (CMD), выполните следующие шаги:

Откройте командную строку (CMD), нажав Win + R, введите "cmd" и нажмите Enter.

В командной строке введите следующую команду и нажмите Enter:

powershell -Command "Start-Process powershell -Verb RunAs"

Эта команда запустит PowerShell с правами администратора. После выполнения этой команды, вас попросят подтвердить выполнение операции. Введите "Y" или "Д" (в зависимости от языка интерфейса) и нажмите Enter, чтобы подтвердить.

Изменить настройку выполнения PowerShell на "Unrestricted"

Для запуска процесса с правами администратора без диалогового окна запроса на разрешение можно воспользоваться запуском скрипта PowerShell с настройками выполнения "Unrestricted". Это позволит выполнить скрипт без подтверждения.

Откройте командную строку (CMD) с правами администратора. Для этого нажмите Win + X и выберите "Windows Terminal (Admin)" или "Command Prompt (Admin)".

В командной строке введите следующую команду и нажмите Enter:

powershell Set-ExecutionPolicy Unrestricted -Force

Эта команда изменит настройку выполнения PowerShell на "Unrestricted", позволяя запускать скрипты без ограничений.

Теперь вы можете запустить PowerShell с правами администратора из командной строки без диалогового окна запроса на разрешение:

powershell

Проверка текущих прав (ролей) пользователя

Чтобы проверить текущие права (роли) пользователя в сеансе PowerShell, вы можете использовать следующую команду:

whoami /all

Эта команда выведет информацию о текущем пользователе, его группах и ролях. Вы найдете раздел "Роли пользователя" (User Roles), который покажет, какие права у пользователя в данной сессии.

Вывод команды "whoami /all" PowerShell в Python

Для получения доступа к выводу команды PowerShell в Python, вы можете воспользоваться модулем subprocess. Вот пример того, как вы можете выполнить команду PowerShell и получить её вывод в Python:

import subprocess

# Команда PowerShell
powershell_command = "whoami /all"

# Запускаем команду и получаем вывод
result = subprocess.run(["powershell.exe", powershell_command], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# Проверяем успешность выполнения команды
if result.returncode == 0:
    # Вывод успешной команды
    output = result.stdout
    print("Output:")
    print(output)
else:
    # Ошибка выполнения команды
    error = result.stderr
    print("Error:")
    print(error)

Этот код выполняет команду PowerShell whoami /all, затем проверяет код возврата. Если код возврата равен 0, то это означает успешное выполнение команды, и вывод доступен в result.stdout. Если есть ошибки выполнения, они будут доступны в result.stderr

whoami /all
>>
Пользователь         SID
==================== ============================================
win-X000000000_\user S-0-0-00-000000000-0000000000-000000000-0000


Сведения о группах
-----------------

Группа                                                               Тип                     SID                                          Атрибуты
==================================================================== ======================= ============================================ ==============================================================================
Все                                                                  Хорошо известная группа S-0-0-0                                      Обязательная группа, Включены по умолчанию, Включенная группа
NT AUTHORITY\Локальная учетная запись и член группы "Администраторы" Хорошо известная группа S-0-0-000                                    Обязательная группа, Включены по умолчанию, Включенная группа
WIN-X000000000_\docker-users                                         Псевдоним               S-0-0-00-000000000-0000000000-000000000-0000 Обязательная группа, Включены по умолчанию, Включенная группа
BUILTIN\Администраторы                                               Псевдоним               S-0-0-00-000                                 Обязательная группа, Включены по умолчанию, Включенная группа, Владелец группы
BUILTIN\Пользователи                                                 Псевдоним               S-0-0-00-000                                 Обязательная группа, Включены по умолчанию, Включенная группа
NT AUTHORITY\ИНТЕРАКТИВНЫЕ                                           Хорошо известная группа S-0-0-0                                      Обязательная группа, Включены по умолчанию, Включенная группа
КОНСОЛЬНЫЙ ВХОД                                                      Хорошо известная группа S-0-0-0                                      Обязательная группа, Включены по умолчанию, Включенная группа
NT AUTHORITY\Прошедшие проверку                                      Хорошо известная группа S-0-0-00                                     Обязательная группа, Включены по умолчанию, Включенная группа
NT AUTHORITY\Данная организация                                      Хорошо известная группа S-0-0-00                                     Обязательная группа, Включены по умолчанию, Включенная группа
NT AUTHORITY\Локальная учетная запись                                Хорошо известная группа S-0-0-000                                    Обязательная группа, Включены по умолчанию, Включенная группа
ЛОКАЛЬНЫЕ                                                            Хорошо известная группа S-0-0-0                                      Обязательная группа, Включены по умолчанию, Включенная группа
NT AUTHORITY\Проверка подлинности NTLM                               Хорошо известная группа S-0-0-00-00                                  Обязательная группа, Включены по умолчанию, Включенная группа
Обязательная метка\Высокий обязательный уровень                      Метка                   S-0-00-00000


Сведения о привилегиях
----------------------

Имя привилегии                            Описание                                                               Область, край
========================================= ====================================================================== =============
SeIncreaseQuotaPrivilege                  Настройка квот памяти для процесса                                     Отключен
SeSecurityPrivilege                       Управление аудитом и журналом безопасности                             Отключен
SeTakeOwnershipPrivilege                  Смена владельцев файлов и других объектов                              Отключен
SeLoadDriverPrivilege                     Загрузка и выгрузка драйверов устройств                                Отключен
SeSystemProfilePrivilege                  Профилирование производительности системы                              Отключен
SeSystemtimePrivilege                     Изменение системного времени                                           Отключен
SeProfileSingleProcessPrivilege           Профилирование одного процесса                                         Отключен
SeIncreaseBasePriorityPrivilege           Увеличение приоритета выполнения                                       Отключен
SeCreatePagefilePrivilege                 Создание файла подкачки                                                Отключен
SeBackupPrivilege                         Архивация файлов и каталогов                                           Отключен
SeRestorePrivilege                        Восстановление файлов и каталогов                                      Отключен
SeShutdownPrivilege                       Завершение работы системы                                              Отключен
SeDebugPrivilege                          Отладка программ                                                       включен
SeSystemEnvironmentPrivilege              Изменение параметров среды изготовителя                                Отключен
SeChangeNotifyPrivilege                   Обход перекрестной проверки                                            включен
SeRemoteShutdownPrivilege                 Принудительное удаленное завершение работы                             Отключен
SeUndockPrivilege                         Отключение компьютера от стыковочного узла                             Отключен
SeManageVolumePrivilege                   Выполнение задач по обслуживанию томов                                 Отключен
SeImpersonatePrivilege                    Имитация клиента после проверки подлинности                            включен
SeCreateGlobalPrivilege                   Создание глобальных объектов                                           включен
SeIncreaseWorkingSetPrivilege             Увеличение рабочего набора процесса                                    Отключен
SeTimeZonePrivilege                       Изменение часового пояса                                               Отключен
SeCreateSymbolicLinkPrivilege             Создание символических ссылок                                          Отключен
SeDelegateSessionUserImpersonatePrivilege Получить маркер олицетворения для другого пользователя в том же сеансе Отключен

Как понять какие права (есть ли админские в этом сеансе)?

Из вывода команды whoami /all`, можно определить, какие права (роли) у вас есть в текущем сеансе. Важные моменты для определения прав:

Сведения о группах: В разделе "Сведения о группах" вы видите информацию о группах, к которым вы принадлежите. Например, вы видите, что ваш пользователь принадлежит к группе "Администраторы" (NT AUTHORITY\Локальная учетная запись и член группы "Администраторы"). Это указывает на то, что у вас есть административные права в этом сеансе.

Сведения о привилегиях: В разделе "Сведения о привилегиях" показаны привилегии, связанные с вашей учетной записью. Например, вы видите привилегию "SeDebugPrivilege", которая включена. Это также может указывать на наличие административных прав.

Исходя из этой информации, ваш текущий сеанс PowerShell имеет административные права, так как вы состоите в группе "Администраторы" и у вас есть привилегия "SeDebugPrivilege". Эти права дают вам широкий доступ к системным ресурсам и функциям в рамках этой сессии.

Домашняя папка пользователя $HOME

В PowerShell вы можете перейти в домашнюю папку пользователя с помощью специальной переменной $HOME или с помощью команды cd (Change Directory). Домашняя папка пользователя обычно представлена в виде C:\Users\<ваше_имя>.

С использованием:

cd $HOME
cd ~

Создание псевдонимов для длинных путей в текущей сессии

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

New-PSDrive -Name "MyAlias" -PSProvider FileSystem -Root "C:\Полный\Путь\К\Папке"

В этой команде:

-Name "MyAlias" указывает на имя псевдонима, которое вы хотите назначить папке. -PSProvider FileSystem указывает, что псевдоним будет ссылаться на файловую систему. -Root "C:\Полный\Путь\К\Папке" - это полный путь к папке, которую вы хотите сделать доступной через этот псевдоним.

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

cd MyAlias:

Здесь MyAlias - это ваш псевдоним, и : используется для перехода в этот псевдоним.

Чтобы удалить псевдоним, используйте команду Remove-PSDrive:

Remove-PSDrive -Name "MyAlias"

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

Псевдонимы, созданные с помощью команды New-PSDrive, действуют только в текущей сессии PowerShell и не сохраняются после её завершения. После перезагрузки PowerShell или компьютера вам придется создавать псевдоним заново, если хотите продолжить его использование.

Создание постоянных псевдонимов для длинных путей.

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

Например, вам может потребоваться добавить команду создания псевдонима в файл $PROFILE.AllUsersCurrentHost.ps1, чтобы псевдоним был доступен для всех пользователей на компьютере.

Точное расположение и имя файла профиля могут различаться в зависимости от версии PowerShell и операционной системы, поэтому лучше посмотрите документацию PowerShell или воспользуйтесь командой

echo $PROFILE

в PowerShell, чтобы узнать актуальное расположение вашего файла профиля.

Работающие псевдонимы для разных сценариев

Ниже приведен скрипт для файла профиля.
Проверьте файл профиля $PROFILE.

PS C:\Users\user> $PROFILE
C:\Users\user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

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

Проверьте, есть ли у вас профиль: В открытом окне PowerShell выполните команду:

Test-Path $Profile

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

New-Item -Type File -Force $Profile

Это создаст файл профиля PowerShell, если его еще нет.

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

function Start-CodeInPro {
    Set-Location C:\Users\user\Documents\Pro
    code .
}
function Start-ChiClusterStart {
    Set-Location C:\Users\user\Documents\Pro\chicago_spark\scripts
    .\start_cont.bat
}
function Start-ChiClusterStop {
    Set-Location C:\Users\user\Documents\Pro\chicago_spark\scripts
    .\stop_cont.bat
}
function Goto-DocPro {
    Set-Location C:\Users\user\Documents\Pro
}

#New-Alias -Name pro -Value (Goto-Path "C:\Users\user\Documents\Pro")

#New-Alias -Name pro -Value { Goto-Path -Path "C:\Users\user\Documents\Pro" }
Write-Host "========================================================="
Write-Host "== ALIASES =============================================="
Write-Host ""

New-Alias dockerd "C:\Program Files\Docker\Docker\Docker Desktop.exe"
Write-Host "=== dockerd ==== C:\Program Files\Docker\Docker\Docker Desktop.exe"

Write-Host ""
New-Alias pr Goto-DocPro
Write-Host "=== pr ========= Set-Location C:\Users\user\Documents\Pro"

Write-Host ""
New-Alias procode Start-CodeInPro
Write-Host "=== procode ==== C:\Users\user\Documents\Pro -> code ."

Write-Host ""
New-Alias chistart Start-ChiclusterStart
Write-Host "=== chistart === C:\Users\user\Documents\Pro\chicago_spark\scripts  -> .\start_cont.bat"

Write-Host ""
New-Alias chistop Start-ChiclusterStop
Write-Host "=== chistop ==== C:\Users\user\Documents\Pro\chicago_spark\scripts  -> .\stop_cont.bat"

Write-Host ""
Write-Host "Aliases created"
Write-Host "========================================================="

и такой красивый вывод:

Windows PowerShell
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

Попробуйте новую кроссплатформенную оболочку PowerShell (https://aka.ms/pscore6)

Хотите активировать Conda? (y/n): n
      ,--./,-.
     / #      \
    |   P*     |
     \   I    /
      ._,.P.+'
=========================================================
== ALIASES ==============================================

=== dockerd ==== C:\Program Files\Docker\Docker\Docker Desktop.exe

=== pr ========= Set-Location C:\Users\user\Documents\Pro

=== procode ==== C:\Users\user\Documents\Pro -> code .

=== chistart === C:\Users\user\Documents\Pro\chicago_spark\scripts  -> .\start_cont.bat

=== chistop ==== C:\Users\user\Documents\Pro\chicago_spark\scripts  -> .\stop_cont.bat

Aliases created
=========================================================
Загрузка личных и системных профилей заняла 2518мс.
PS C:\Users\user>

Стартовый скрипт (найти и отредактировать)

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

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

$PROFILE | Select-Object *

вывод:

PS C:\Users\user> $PROFILE | Select-Object *


AllUsersAllHosts       : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : C:\Users\user\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 74

Существуют разные профили для разных сценариев, включая:

  • AllUsersAllHosts: Применим к всех пользователей и для всех хостов.
  • AllUsersCurrentHost: Применим ко всех пользователям, но только для текущего хоста.
  • CurrentUserAllHosts: Применим только к текущему пользователю, но для всех хостов.
  • CurrentUserCurrentHost: Применим к текущему пользователю и только для текущего хоста.

Если вы хотите просмотреть или изменить ваш стартовый скрипт, вы можете открыть его в редакторе. Поуэршелл скрипт может открываться для редактировании в специализированном редакторе - Интегрированная Среда Сценариев (ISE).

Теоретически скрипты можно редактировать разными редакторами, например так:

code $PROFILE.CurrentUserCurrentHost

(Не проверялось мной). Если файл профиля ещё не создан, выполнение команды его не создаст, но вы можете создать его вручную с помощью команды New-Item:

New-Item -Path $PROFILE.CurrentUserCurrentHost -ItemType File -Force

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

Стартовый скрипт (запрос -> активация виртуального окружения)

Чтобы изменить или отключить скрипт, который выполняется при запуске PowerShell и активирует виртуальное окружение с помощью менеджера Conda, вам нужно отредактировать файл профиля PowerShell. Расположенный, напрмер, по адресу C:\Users\user\Documents\WindowsPowerShell\profile.ps1

#region conda initialize
# !! Contents within this block are managed by 'conda init' !!
If (Test-Path "C:\Users\user\anaconda3\Scripts\conda.exe") {
    $activateConda = Read-Host "Хотите активировать Conda? (y/n)"
    If ($activateConda -eq 'y') {
    # ASCII Art Portrait
$asciiArt = @"
          ____  
        o8%8888,    
      o88%8888888.  
     8'-    -:8888b   
    8'         8888  
   d8.-=.  ==-.:888b  
   >8 '~'  '~'  d8888   
   88      \    ,88888   
   88b.  `-~   ':88888  
   888b ~==~ .:88888  
   88888o--:':::8888      
   `88888| :::' 8888b  
   8888^^'       8888b  
  d888           ,%888b.   
 d88%            %%%8--'-.  
/88:.__ ,       _%-' ---  -  
    '''::===..-'   =  --.  `
"@
Write-Host $asciiArt -ForegroundColor Green
        (& "C:\Users\user\anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | ?{$_} | Invoke-Expression
    }Else {
        # Simple ASCII Art of a Seed
$simpleArt = @"
      ,--./,-.
     / #      \
    |   P      |
     \   I    / 
      `._.P.+'
"@
Write-Host $simpleArt -ForegroundColor Yellow
    }
}
#endregion

Стартовый скрипт Bash (де/активация виртуального окружения)

Для изменения или отключения скрипта, который автоматически активирует виртуальное окружение Conda при запуске терминала в Bash, вам необходимо отредактировать конфигурационный файл вашего shell. Обычно это .bashrc или .bash_profile для пользователя.

Откройте терминал и введите команду для редактирования файла .bashrc или .bash_profile. Обычно это делается с помощью редактора, такого как nano или vim:

nano ~/.bashrc

или:

nano ~/.bash_profile

Найдите в файле строку, которая активирует Conda. Это обычно что-то вроде:

source /path/to/conda.sh
conda activate some_environment

или строка, начинающаяся с conda activate.
Пример из жизни:

eval "$(command conda shell.bash hook 2> /dev/null)"

Закомментируйте соответствующие строки, добавив # в начале каждой из них.
После внесения изменений сохраните файл и закройте редактор. Например, в nano это делается через Ctrl+O, затем Enter и Ctrl+X.

Чтобы применить изменения, либо перезапустите терминал, либо введите команду source ~/.bashrc или source ~/.bash_profile (в зависимости от того, какой файл вы редактировали).

Запуск Докер

  • Служба докер. Если служба не запущена, вы можете запустить её через службы Windows или используя следующую команду:
Start-Service docker
  • Докер декстоп. Если у вас стандартная установка, то команда будет выглядеть так:
Start-Process "C:\Program Files\Docker\Docker\Docker Desktop.exe"

Также возможно, что вы можете запустить Docker Desktop, используя просто docker в PowerShell, если алиас настроен правильно при установке Docker Desktop.
Однако, это скорее откроет интерфейс командной строки Docker, чем графический интерфейс Docker Desktop. Для работы с Docker через командную строку вам не обязательно запускать Docker Desktop; достаточно убедиться, что фоновые службы Docker запущены. Docker Desktop — это дополнительный инструмент, который предоставляет GUI для управления Docker контейнерами и настройками.

Создание файла .gitignore

Создайте файл .gitignore с помощью команды New-Item и передайте имя файла:

New-Item .gitignore -type file

Откройте файл .gitignore в текстовом редакторе (например, Notepad или Visual Studio Code) и добавьте строку, чтобы игнорировать папку "arch", как описано в предыдущем ответе:

arch/

Текстовые редакторы

В PowerShell вы можете использовать стандартные текстовые редакторы, такие как Notepad или Visual Studio Code, чтобы открыть файл .gitignore или любой другой текстовый файл. Вот как это сделать:

  • Notepad:
    Вы можете открыть файл .gitignore с помощью команды notepad и передать ей путь к файлу:
notepad .gitignore
  • Visual Studio Code:
code .
  • Vim:
vim .gitignore

Команды Vim

Vim откроет файл .gitignore в текстовом режиме, готовый к редактированию. Вы можете вводить текст, редактировать его и сохранить изменения, выполнив следующие действия:
Для вставки текста, нажмите клавишу i (для входа в режим вставки). После редактирования текста, нажмите клавишу Esc (чтобы выйти из режима вставки).
Чтобы сохранить изменения, введите :w и нажмите клавишу Enter.
Чтобы выйти из Vim, введите :q и нажмите клавишу Enter.

Это основные команды Vim для вставки и сохранения изменений. Vim имеет множество других возможностей

Просмотр файлов средствами PowerShell (поблочно/построчно)

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

Get-Content .gitignore
gc .gitignore

Вывод по блокам (например, по 10 строк в блоке):

gc .gitignore -ReadCount 10

Вывод по одной строке за раз с помощью клавиш:

gc .gitignore -Wait

Параметр -ReadCount в команде gc контролирует количество строк, которые считываются одновременно из файла, но не обязательно устанавливает задержку вывода. Для вывода по одной строке с задержкой между строками вам, возможно, придется использовать другой подход.

Вывод строк файла с задержкой (использование ForEach-Object)

Вы можете использовать конструкцию ForEach-Object для обработки строк файла и добавить задержку между каждой строкой. Вот пример:

Get-Content .gitignore | ForEach-Object { $_; Start-Sleep -Seconds 1 }

Вывод строк файла по нажатию клавиши (использование .ReadKey)

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

Get-Content .gitignore | ForEach-Object {
    $_
    Write-Host "Нажмите клавишу для продолжения..."
    $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}

Справка по команде Get-Content

Для того чтобы посмотреть справку по команде Get-Content в PowerShell, вы можете использовать команду Get-Help. Просто выполните следующую команду в PowerShell:

Get-Help Get-Content

Если вы хотите быстро посмотреть краткую справку (краткое описание) без открытия полной справки, вы можете выполнить следующую команду:

Get-Help Get-Content -Brief

ForEach-Object. Описание команды

Команда ForEach-Object в PowerShell представляет собой мощный инструмент для обработки элементов коллекции или потока данных, выполняя определенные действия для каждого элемента. Она может использоваться в командлетах для обработки, фильтрации, манипуляции данными и многих других сценариях. Вот некоторые основные аспекты команды ForEach-Object:

<поток данных> | ForEach-Object { <команды или действия> }

Где <поток данных> - это данные, которые вы хотите обработать, и <команды или действия> - это команды, которые будут выполнены для каждого элемента.

Использование:

ForEach-Object. Вывести каждый элемент массива на экран

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

Например, чтобы вывести каждый элемент массива на экран, вы можете сделать следующее:

$myArray = @(1, 2, 3, 4, 5)
$myArray | ForEach-Object { Write-Host $_ }

Здесь $_ представляет текущий элемент из массива на каждой итерации.

ForEach-Object. Фильтрация и обработка данных:

Вы можете использовать ForEach-Object для фильтрации данных и выполнения определенных действий только для элементов, которые соответствуют вашим критериям. Например, вы можете фильтровать строки с определенным текстом из вывода команды Get-Content:

Get-Content myfile.txt | ForEach-Object {
    if ($_ -like "*search_text*") {
        Write-Host $_
    }
}

ForEach-Object. Потоковая обработка данных:

ForEach-Object обрабатывает данные по одному элементу за раз, что позволяет эффективно обрабатывать большие объемы данных без необходимости загрузки всего набора данных в память.

ForEach-Object. Параметры

ForEach-Object имеет ряд параметров, которые позволяют настроить ее поведение, такие как -Begin, -Process, и -End, которые позволяют выполнять действия до начала обработки, во время обработки и после обработки потока данных соответственно.

Например, -Begin может быть использован для инициализации переменных перед началом обработки, -End для завершения обработки и выполнения завершающих действий.

Переход на 2 уровня и более выше

В PowerShell для перехода на два уровня папок выше (то есть на два уровня вверх в иерархии каталогов) вы можете использовать команду cd (Change Directory) с комбинацией ..\...
Для перехода на несколько уровней вверх в иерархии каталогов в PowerShell вы можете использовать выражение .., которое позволяет перемещаться на один уровень выше. Повторяя его нужное количество раз, вы достигнете желаемого уровня.

Например, если вы хотите перейти на три уровня вверх от текущего местоположения, выполните следующую команду cd ..\..\... Это переместит вас на три уровня выше относительно вашего текущего каталога. Количество ..\ указывает на количество уровней, на которые вы хотите подняться вверх.

Профиль $PROFILE - проверка, создание

Для различных установок и настроек работы в оболочке поуэршелл необходимо использовать файл профиля $PROFILE.

PS C:\Users\user> $PROFILE
C:\Users\user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

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

Проверьте, есть ли у вас профиль: В открытом окне PowerShell выполните команду:

Test-Path $Profile

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

New-Item -Type File -Force $Profile

Это создаст файл профиля PowerShell, если его еще нет.

История команд

В PowerShell можно вывести историю команд, используя переменную $history.

Get-History

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

  1. Проверьте, есть ли у вас профиль: В открытом окне PowerShell выполните команду:
Test-Path $Profile

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

New-Item -Type File -Force $Profile

Это создаст файл профиля PowerShell, если его еще нет.
3. Отредактируйте профиль: Теперь откройте профиль для редактирования в вашем текстовом редакторе по умолчанию. Вы можете использовать команду notepad $Profile, чтобы открыть профиль в блокноте. 4. Добавьте код сохранения истории команд: В профиле вы можете добавить следующий код для сохранения истории команд:

# Сохранение истории команд PowerShell
$HistoryPath = Join-Path -Path $env:USERPROFILE -ChildPath "powershell_history.txt"
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Action {
    Get-History | Export-Csv -Path $HistoryPath -NoTypeInformation
}

Этот код сохраняет историю команд PowerShell в файл powershell_history.txt в вашем домашнем каталоге при завершении каждой сессии PowerShell.

  1. Сохраните и закройте файл: После добавления кода сохраните файл профиля и закройте его.

  2. Перезапустите PowerShell: Чтобы изменения вступили в силу, закройте текущее окно PowerShell и откройте новое.

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