А АWednesday 29 November 2017

Профилирование в PowerShell.


Всем привет.

Во время работы с PowerShell все псевдонимы, функции и переменные на самом деле добавляются только в ваш текущий сеанс PowerShell.

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

Основные сведения о профилях в PowerShell.

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

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

1) %windir%\system32\WindowsPowerShell\v1.0\profile.ps1
Действие этого профиля распространяется на всех пользователей и все оболочки

2) %windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1
Действие этого профиля распространяется на всех пользователей, но только на одну оболочку - Microsoft.PowerShell

3) %UserProfile%\My Documents\WindowsPowerShell\profile.ps1
Действие этого профиля распространяется только на текущего пользователя и на все оболочки

4) %UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Действие этого профиля распространяется только на текущего пользователя и только на оболочку Microsoft.PowerShell.

Как создать свой профиль.

При создании или импорте переменные, псевдонимы функции или оснастки Windows PowerShell при добавлении добавляются только в текущий сеанс. При завершении сеанса или закрытии окна они исчезают. Для сохранения и обеспечения доступности во всех сеансах добавьте в профиль Windows PowerShell постоянно используемые переменные, псевдонимы, функции и команды. Можно также создавать и распространять профили для обеспечения согласованного представления оболочки Windows PowerShell в крупных средах. Автоматически профили Windows PowerShell не создаются. Чтобы создать профиль, создайте текстовый файл с одним из указанных выше имен в указанном месте. Обычно при работе с оболочкой Windows PowerShell используется профиль, специфичный для пользователя и оболочки, который называется пользовательским профилем. Данные о расположении этого профиля хранятся в переменной $profile.

Чтобы узнать, был ли создан пользовательский профиль Windows PowerShell, введите следующую команду:
test-path $profile

Если профиль существует, эта команда вернет True, в противном случае - False.

Для создания файла профиля Windows PowerShell введите следующую команду:
new-item -path $profile -itemtype file -force

Чтобы открыть профиль в Блокноте, введите следующую команду:
notepad $profile

Чтобы создать какой-либо из других профилей, например профиль, действие которого распространяется на всех пользователей и все оболочки, введите следующую команду:
new-item -path $env:windir\System32\WindowsPowerShell\v1.0\profile.ps1 -itemtype file -force

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

Если профиль создается в Блокноте, имя файла нужно заключить в кавычки, чтобы сохранить расширение файла PS1. Пример "Microsoft.PowerShell_profile.ps1". Если не заключить имя файла в кавычки, Блокнот дополнит его расширением TXT и оболочка Windows PowerShell не сможет распознать файл в таком виде Microsoft.PowerShell_profile.ps1.txt.

В профиле обычно хранятся псевдонимы, функции и переменные, используемые чаще всего. Очень полезной является функция, открывающая профиль в любимом текстовом редакторе пользователя. Например, следующая команда создает функцию pro, которая открывает пользовательский профиль в Блокноте:
function pro { notepad $profile }

Удачно созданный профиль может упростить использование оболочки Windows PowerShell и администрирование системы в целом.


Абсолютно не претендуя на универсальность в моем профиле Microsoft.PowerShell_profile.ps1 на сегодня находится следующее:


#*************************************************************************
#
#  Copyright (c) Vinnytsia, 2017. All rights reserved.
#  Module name: Microsoft.PowerShell_profile.ps1
#  Abstract: enables an administrator to run/query/view my existing scripts by PowerShell.
#  Version:  1.2  04.07.2016 Added PSCX library
#
#*************************************************************************


# current version of PS
Write-Host "Version of PS:"
$PSVersionTable.PSVersion


# Is this version ISE ?
Write-Host "This is version as " $Host.Name


# Устанавливаем корневую папку           
$Root = "D:\Courses!!!\Done!\PowerShell\scripts\"            
# Переходим в неё           
Set-Location $Root            


# папки PS
Write-Host "Root folder  :" $Root
Write-Host "Home folder  :" $Home
Write-Host "PsHome folder:" $PsHome
Write-Host "My Profile   :" $Profile
Write-Host ""
       
# Включаем отладочную и дополнительную информацию по умолчанию (чтобы не приходилось указывать ключ -Verbose)           
$VerbosePreference = "Continue"           
#$DebugPreference = "Continue"           
           
# Проверяем, обладает ли пользователь повышенными привилегиями
$IsElevated=$false           
foreach ($sid in [Security.Principal.WindowsIdentity]::GetCurrent().Groups) {           
    if ($sid.Translate([Security.Principal.SecurityIdentifier]).IsWellKnown([Security.Principal.WellKnownSidType]::BuiltinAdministratorsSid)) {           
        $IsElevated=$true           
    }           
}


# Включаем фильтр для Get-Typename: позаимствовано из PSCX          
filter Get-TypeName {if ($_ -eq $null) {'<null>'} else {$_.GetType().Fullname }}
# пример работы фильтра для Get-Typename           
# Get-Date | Get-TypeName


# Подключаем PowerTab           
Import-Module "PowerTab"-ArgumentList "D:\MyDocuments\WindowsPowerShell\PowerTabConfig.xml"


# Подключаем PSCX           
Import-Module "PSCX"






Кстати, может возникнуть ситуация, когда необходимо запустить оснастку PowerShell без использования профилей. Так сказать срочно нужен PowerShell без довесок. Для этого используется параметр -NoProfile. Сделать это можно так:
PowerShell  -noprofile


Удачи.

1 comment:

Anonymous said...

Write-Host "Path to modules:" $env:PSModulePath

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное