РАЗДЕЛ Привилегированные переменные КРАТКОЕ ОПИСАНИЕ Переменные, которые настраивают поведение Windows PowerShell ПОЛНОЕ ОПИСАНИЕ Оболочка Windows PowerShell включает в себя набор переменных, позволяющих настроить ее поведение. Привилегированные переменные действуют как параметры в системах с графическим интерфейсом. Привилегированные переменные влияют на рабочую среду Windows PowerShell и на все запускаемые в среде команды. Во многих случаях у командлетов есть параметры, позволяющие переопределить поведение, заданное привилегированными переменными, для конкретной команды. В следующей таблице перечислены привилегированные переменные и их значения по умолчанию. Переменная Значение по умолчанию -------- ------------- $ConfirmPreference High $DebugPreference SilentlyContinue $ErrorActionPreference Continue $ErrorView NormalView $FormatEnumerationLimit 4 $LogCommandHealthEvent False (запись в журнал не производится) $LogCommandLifecycleEvent False (запись в журнал не производится) $LogEngineHealthEvent True (производится запись в журнал) $LogEngineLifecycleEvent True (производится запись в журнал) $LogProviderLifecycleEvent True (производится запись в журнал) $LogProviderHealthEvent True (производится запись в журнал) $MaximumAliasCount 4096 $MaximumDriveCount 4096 $MaximumErrorCount 256 $MaximumFunctionCount 4096 $MaximumHistoryCount 64 $MaximumVariableCount 4096 $OFS (Пробел (" ")) $OutputEncoding ASCIIEncoding object $ProgressPreference Continue $PSEmailServer (Нет) $PSSessionApplicationName WSMAN $PSSessionConfigurationName https://schemas.microsoft.com/powershell/microsoft.powershell $PSSessionOption (См.далее) $VerbosePreference SilentlyContinue $WarningPreference Continue $WhatIfPreference 0 Windows PowerShell также включает в себя следующие переменные среды, в которых хранятся настройки пользователя. Дополнительные сведения о переменных среды см. в разделе about_environment_variables. Переменная -------- PSModulePath РАБОТА С ПРИВИЛЕГИРОВАННЫМИ ПЕРЕМЕННЫМИ Этот документ описывает каждую из привилегированных переменных. Чтобы вывести на дисплей текущее значение определенной привилегированной переменной, введите имя переменной. В ответ Windows PowerShell выдаст значение. Например, следующая команда отображает значение переменной $ConfirmPreference. PS> $ConfirmPreference High Чтобы изменить значение переменной, используйте инструкцию назначения. Например, следующая инструкция присваивает значение "Medium" переменной $ConfirmPreference. PS> $ConfirmPreference = "Medium" Как и все переменные, заданные значения специфичны для текущего окна Windows PowerShell. Чтобы они действовали во всех окнах Windows PowerShell, их следует добавить в профиль Windows PowerShell. Дополнительные сведения см. в разделе about_profiles. УДАЛЕННАЯ РАБОТА При запуске команд на удаленном компьютере удаленные команды подвержены только настройкам, заданным в клиенте Windows PowerShell на этом удаленном компьютере. Например, при запуске удаленной команды значение переменной $DebugPreference на удаленном компьютере определяет, как Windows PowerShell отвечает на сообщения отладки. Дополнительные сведения об удаленных командах см. в разделе about_remote. $ConfirmPreference ------------------ Определяет, какие действия командлета автоматически запрашивают подтверждение у пользователя перед выполнением. Когда значение $ConfirmPreference (High, Medium, Low, None) больше или равно риску выполнения действия командлета (High, Medium, Low, None), Windows PowerShell автоматически запрашивает подтверждение у пользователя перед выполнением действия. Можно использовать параметр Confirm командлета, чтобы переопределить эту настройку для определенной команды. Допустимые значения: None. Никакие действия командлета не требуют подтверждения автоматически. Пользователям следует использовать параметр Confirm, чтобы запрос подтверждения выполнялся для конкретных команд. Low. Действия командлета с низким, средним или высоким риском автоматически требуют подтверждения. Чтобы отменить подтверждение конкретной команды, используйте параметр -Confirm:$false. Medium. Действия командлета со средним или высоким риском автоматически требуют подтверждения. Чтобы включить подтверждение для конкретной команды, используйте параметр -confirm. Чтобы отменить подтверждение конкретной команды, используйте значение confirm:$false. High. Действия командлета с высоким риском автоматически (по умолчанию) требуют подтверждения. Чтобы включить подтверждение для конкретной команды, используйте параметр -confirm. Чтобы отменить подтверждение для конкретной команды, используйте значение -confirm:$false. ПОДРОБНОЕ ОБЪЯСНЕНИЕ Когда действие, выполняемое командлетом, значительно влияет на систему, например оно удаляет данные или использует большой объем ресурсов системы, Windows PowerShell может автоматически запросить подтверждение перед выполнением действия. Пример: PS> remove-item pref2.txt Подтверждение Выполнить это действие? Выполнение операции "Удаление файла" над целевым объектом "C:\pref2.txt". [Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"): Оценка риска является частью командлета, это его аспект "ConfirmImpact". Ее нельзя изменить. Командлет, который может представлять угрозу системе, имеет параметр Confirm, который можно использовать для включения или отключения подтверждения для конкретной команды. Так как большинство командлетов имеют по умолчанию показатель риска "Medium", а переменная $ConfirmPreference имеет по умолчанию значение "High", автоматический запрос подтверждения происходит редко. Однако можно активировать автоматический запрос подтверждения, изменив значение переменной $ConfirmPreference на "Medium" или "Low". ПРИМЕРЫ Этот пример показывает, что произойдет, если для переменной $ConfirmPreference задано значение по умолчанию. Значение High требует подтверждения только для действий командлетов с высоким риском. Так как большинство действий имеют средний уровень риска, они не требуют подтверждения автоматически, хотя можно использовать параметр Confirm командлета, чтобы включить подтверждение определенной команды. PS> $confirmpreference #Получение текущего значения переменной High PS> remove-item temp1.txt #Удалить файл PS> #Удалено без подтверждения PS> remove-item temp2.txt -confirm #Используется параметр Confirm Подтверждение Выполнить это действие? Выполнение операции "Удаление файла" над целевым объектом "C:\temp2.txt". [Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"): Этот пример показывает результат изменения значения переменной $ConfirmPrefernce на Medium. Так как большинство действий командлетов имеют средний уровень риска, для них автоматически требуется подтверждение. Чтобы отключить запрос подтверждения для конкретной команды, следует использовать параметр Confirm со значением $false. PS> $confirmpreference = "Medium" #Изменение значение переменной $ConfirmPreference PS> remove-item temp2.txt #Удаление файла вызывает запрос подтверждения Подтверждение Выполнить это действие? Выполнение операции "Удаление файла" над целевым объектом "C:\temp2.txt". [Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию "Y"): PS> remove-item temp3.txt -confirm:$false #Используется параметр Confirm для отключения запроса подтверждения PS> $DebugPreference ------------------ Определяет, как Windows PowerShell отвечает на сообщения отладки, созданные скриптом, командлетом или поставщиком, либо командой Write-Debug в командной строке. Некоторые командлеты отображают сообщения отладки, которые обычно являются сугубо техническими сообщениями для программистов и специалистов технической поддержки. По умолчанию сообщения отладки не отображаются, но можно настроить отображение сообщений отладки, изменив значение переменной $DebugPreference. Также можно использовать общий параметр Debug командлета, чтобы отображать или скрывать сообщения отладки для конкретной команды. Чтобы получить дополнительные сведения, введите команду "get-help about_commonparameters". Допустимые значения: Stop. Отображается сообщение отладки и выполнение прекращается. Ошибка записывается на консоль. Inquire. Выводится сообщение отладки и запрос на продолжение. Continue. Отображается сообщение отладки, выполнение продолжается. SilentlyContinue. Результат не заметен. Сообщение отладки (по умолчанию) не отображается, выполнение продолжается без остановки. ПРИМЕРЫ Следующие примеры показывают результат изменения значений переменной $DebugPreference, когда команда Write-Debug вводится в командной строке. Изменение касается всех сообщений отладки, включая сообщения, созданные командлетами и скриптами. Примеры также демонстрируют использование общего параметра Debug, который позволяет отобразить или скрыть сообщения отладки, связанные с определенной командой. Этот пример показывает, что произойдет, если задано значение по умолчанию "SilentlyContinue". Сообщение отладки не отображается, работа продолжается. В последней команде используется параметр Debug, чтобы переопределить настройку для конкретной команды. PS> $debugpreference #Получение текущего значения SilentlyContinue $DebugPreference PS> write-debug "Hello, World" PS> # Сообщение отладки не отображается. PS> write-debug "Hello, World" -Debug # Используется параметр Debug ОТЛАДКА: Hello, World # Запрашивается сообщение отладки Подтверждение Продолжить выполнение текущей операции? [Y] Да [A] Да для всех [H] Прервать команду [S] Приостановить [?] Справка (по умолчанию "Y"): Этот пример показывает, что произойдет, если задано значение "Continue". В последней команде используется параметр Debug со значением $false, чтобы скрыть сообщение для конкретной команды. PS> $debugpreference = "Continue" # Значение изменяется на "Continue" PS> write-debug "Hello, World" ОТЛАДКА: Hello, World # Сообщение отладки отображается, работа продолжается. PS> PS> write-debug "Hello, World" -Debug:$false # Используется параметр Debug со значением false. PS> # Сообщение отладки не отображается. Этот пример показывает, что произойдет, если задано значение "Stop". В последней команде используется параметр Debug со значением $false, чтобы скрыть сообщение для конкретной команды. PS> $debugpreference = "Stop" # Значение изменяется на "Stop" PS> write-debug "Hello, World" ОТЛАДКА: Hello, World Write-Debug : Выполнение команды остановлено, так как переменной оболочки "DebugPreference" присвоено значение Stop. В строке:1 знак:12 + write-debug <<<< "Hello, World" PS> write-debug "Hello, World" -Debug:$false # Используется параметр Debug со значением $false PS> # Сообщение отладки не отображается, выполнение не останавливается. Этот пример показывает, что произойдет, если задано значение "Inquire". В последней команде используется параметр Debug со значением $false, чтобы скрыть сообщение для конкретной команды. PS> $debugpreference = "Inquire" PS> write-debug "Hello, World" ОТЛАДКА: Hello, World Подтверждение Продолжить выполнение текущей операции? [Y] Да [A] Да для всех [H] Прервать команду [S] Приостановить [?] Справка (по умолчанию "Y"): PS> write-debug "Hello, World" -Debug:$false # Используется параметр Debug со значением $false PS> # Сообщение отладки не отображается, выполнение продолжается без остановки. $ErrorActionPreference ---------------------- Определяет, как Windows PowerShell отвечает на непрерывающую ошибку (ошибка, которая не останавливает обработку командлета) в командной строке или в скрипте, командлете или поставщике (например, на ошибки, сгенерированные командлетом Write-Error). Также можно использовать общий параметр ErrorAction командлета, чтобы переопределить эту настройку для определенной команды. Чтобы получить дополнительные сведения, введите команду "get-help about_commonparameters". Допустимые значения: Stop. Отображается сообщение об ошибке, выполнение прекращается. Inquire. Выводится сообщение об ошибке и запрос на продолжение. Continue. Отображается сообщение об ошибке, выполнение продолжается. SilentlyContinue. Результат не заметен. Сообщение об ошибке (по умолчанию) не отображается, выполнение продолжается без остановки. Ни переменная $ErrorActionPreference, ни общий параметр ErrorAction не влияют на то, как Windows PowerShell отвечает на прерывающие ошибки (ошибки, останавливающие обработку командлета). Чтобы получить дополнительные сведения об общем параметре ErrorAction, введите команду "get-help about_commonparameters". ПРИМЕРЫ Данные примеры показывают, что происходит при различных значениях переменной $ErrorActionPreference и использовании общего параметра ErrorAction для переопределения настройки для конкретной команды. Для параметра ErrorAction допустимы те же значения, что и для переменной $ErrorActionPreference. Этот пример показывает, что произойдет, если задано значение по умолчанию "Continue". PS> $erroractionpreference Continue # Отображается значение привилегированной переменной. PS> write-error "Hello, World" # Генерируется непрерывающая ошибка. write-error "Hello, World" : Hello, World # Отображается сообщение об ошибке и продолжается выполнение. PS> write-error "Hello, World" -ErrorAction:SilentlyContinue # Используется параметр ErrorAction со значением "SilentlyContinue". PS> # Сообщение об ошибке не отображается, выполнение продолжается. Этот пример показывает, что произойдет, если задано значение "SilentlyContinue". PS> $ErrorActionPreference = "SilentlyContinue" # Изменение значения привилегированной переменной. PS> write-error "Hello, World" # Генерируется сообщение об ошибке. PS> # Сообщение об ошибке не выводится. PS> write-error "Hello, World" -erroraction:continue # Используется параметр ErrorAction со значением "Continue". write-error "Hello, World" -erroraction:continue : Hello, World # Выводится сообщение об ошибке и выполнение продолжается. Этот пример показывает результат реальной ошибки. В данном случае команда запрашивает несуществующий файл nofile.txt. В примере также используется общий параметр ErrorAction для переопределения настройки. PS> $erroractionpreference SilentlyContinue # Отображается значение привилегированной переменной. PS> get-childitem -path nofile.txt PS> # Сообщение об ошибке не выводится. PS> $ErrorActionPreference = "Continue" # Значение изменяется на "Continue". PS> get-childitem -path nofile.txt Get-ChildItem : Не удается найти путь "C:\nofile.txt", так как он не существует. В строке:1 знак:4 + get-childitem <<<< nofile.txt PS> get-childitem -path nofile.txt -erroraction SilentlyContinue # Используется параметр ErrorAction # Сообщение об ошибке не выводится. PS> $ErrorActionPreference = "Inquire" # Значение изменяется на "Inquire". PS> get-childitem -path nofile.txt Подтверждение Не удается найти путь "C:\nofile.txt", так как он не существует. [Y] Да [A] Да для всех [H] Прервать команду [S] Приостановить [?] Справка (по умолчанию "Y"): y Get-ChildItem : Не удается найти путь "C:\nofile.txt", так как он не существует. В строке:1 знак:4 + get-childitem <<<< nofile.txt PS> $ErrorActionPreference = "Continue" # Значение изменяется на "Continue". PS> Get-Childitem nofile.txt -erroraction "Inquire" # Используется параметр ErrorAction для переопределения значения. Подтверждение Не удается найти путь "C:\nofile.txt", так как он не существует. [Y] Да [A] Да для всех [H] Прервать команду [S] Приостановить [?] Справка (по умолчанию "Y"): $ErrorView ---------- Определяет формат отображения сообщений об ошибках в Windows PowerShell. Допустимые значения: NormalView. Отображаются подробные сведения. (по умолчанию) Подходит для большинства пользователей. Включает описание ошибки, имя объекта, с которым связана ошибка, и стрелки (<<<<), указывающие на слова команды, вызвавшие ошибку. CategoryView. Отображаются краткие структурированные сведения. Формат подходит для рабочих сред. Формат:{категория}: ({имя_целевого_объекта}: {тип_целевого_объекта}):[{действие}], {причина} Дополнительные сведения о полях формата CategoryView см. в разделе "Класс ErrorCategoryInfo" документации Windows PowerShell SDK. ПРИМЕРЫ Данные примеры показывают влияние различных значений переменной $ErrorView. Этот пример показывает, как отображается ошибка, если переменная $ErrorView имеет значение NormalView. В данном случае команда Get-ChildItem запрашивает несуществующий файл. PS> $ErrorView # Проверка значения. NormalView PS> get-childitem nofile.txt # Поиск несуществующего файла. Get-ChildItem : Не удается найти путь "C:\nofile.txt", так как он не существует. В строке:1 знак:14 + get-childitem <<<< nofile.txt Этот пример показывает, как та же ошибка отображается, если переменная $ErrorView имеет значение CategoryView. PS> $ErrorView = "CategoryView" # Значение изменяется CategoryView PS> get-childitem nofile.txt ObjectNotFound: (C:\nofile.txt:String) [Get-ChildItem], ItemNotFoundException Этот пример показывает, что значение переменой $ErrorView влияет только на отображение ошибки; структура объекта ошибки, который хранится в автоматической переменной $error, не меняется. Дополнительные сведения об автоматической переменной $error см. в разделе about_automatic_variables. Эта команда извлекает объект ErrorRecord, связанный с последней ошибкой в массиве ошибок (элемент 0), и приводит все свойства объекта ошибки к формату списка. PS> $error[0] | format-list -property * -force Exception : System.Management.Automation.ItemNotFoundException: Не удается найти путь "C:\nofile.txt", так как он не существует. at System.Management.Automation.SessionStateInternal.GetChildItems(Stringpath, Boolean recurse, CmdletProviderContext context) at System.Management.Automation.ChildItemCmdletProviderIntrinsics.Get(String path, Boolean recurse, CmdletProviderContext context) at Microsoft.PowerShell.Commands.GetChildItemCommand.ProcessRecord() : TargetObject : C:\nofile.txt CategoryInfo : ObjectNotFound: (C:\nofile.txt:String) [Get-ChildItem], ItemNotFoundException FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand ErrorDetails : InvocationInfo : System.Management.Automation.InvocationInfo $FormatEnumerationLimit ----------------------- Определяет, сколько элементов перечисления отображается. Эта переменная не влияет на сами объекты, только на то, как они отображаются.Когда значение переменной $FormatEnumerationLimit меньше, чем число элементов перечисления, Windows PowerShell добавляет многоточие (...) для обозначения неотображенных элементов. Допустимые значения: целые числа (Int32) Значение по умолчанию: 4 ПРИМЕРЫ Этот пример показывает, как использовать переменную $FormatEnumerationLimit, чтобы улучшить отображение перечисляемых элементов. В этом примере команда создает таблицу, где все запущенные на компьютере службы перечислены в виде двух групп, в одну группу входят выполняющиеся службы, во вторую - остановленные. Команда Get-Service используется для получения всех служб и последующей передачи результатов по конвейеру в командлет Group-Object, который группирует результаты, основываясь на состоянии службы. В результате выводится таблица, где состояния перечислены в столбце Name, а соответствующие процессы - в столбце Group. (Чтобы изменить названия столбцов, воспользуйтесь хэш-таблицей. Чтобы получить дополнительные сведения, введите команду "get-help format-table -examples" и изучите примеры.) Для каждого состояния отображается максимум 4 службы в столбце Group. Чтобы увеличить число перечисленных элементов, увеличьте значение переменной $FormatEnumerationLimit до 1000. В результате список в столбце Group будет ограничен длиной строки. В последней команде примера используется параметр Wrap командлета Format-Table для отображения всех процессов в каждой группе состояния. PS> $formatenumerationlimit # Поиск текущего значения 4 PS> get-service | group-object -property status # Перечисляются все службы, сгруппированные по состоянию Count Name Group ----- ---- ----- 60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv...} 41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart...} # Список усекается после 4-го элемента. PS> $formatenumerationlimit = 1000 # Предел увеличивается до 1000. PS> get-service | group-object -property status # Команда повторяется. Count Name Group ----- ---- ----- 60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, BITS, CcmExec... 41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart, Browser, CiSvc... PS> get-service | group-object -property status | format-table -wrap # Добавляется параметр Wrap. Count Name Group ----- ---- ----- 60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, BITS, CcmExec, Client for NFS, CryptSvc, DcomLaunch, Dhcp, dmserver, Dnscache, ERSvc, Eventlog, EventSystem, FwcAgent, helpsvc, HidServ, IISADMIN, InoRPC, InoRT, InoTask, lanmanserver, lanmanworkstation, LmHosts, MDM, Netlogon, Netman, Nla, NtLmSsp, PlugPlay, PolicyAgent, ProtectedStorage, RasMan, RemoteRegistry, RpcSs, SamSs, Schedule, seclogon, SENS, SharedAccess, ShellHWDetection, SMT PSVC, Spooler, srservice, SSDPSRV, stisvc, TapiSrv, TermService, Themes, TrkWks, UMWdf, W32Time, W3SVC, WebClient, winmgmt, wscsvc, wuauserv, WZCSVC, zzInterix} 41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart, Browser, CiSvc, ClipSrv, clr_optimization_v2.0.50727_32, COMSysApp, CronService, dmadmin, FastUserSwitchingCompatibility, HTTPFilter, ImapiService, Mapsvc, Messenger, mnmsrvc, MSDTC, MSIServer, msvsmon80, NetDDE, NetDDEdsdm, NtmsSvc, NVSvc, ose, RasAuto, RDSessMgr, RemoteAccess, RpcLocator, RSVP, SCardSvr, SwPrv, SysmonLog, TlntSvr, upnphost, UPS, VSS, WmdmPmSN, Wmi, WmiApSrv, xmlprov} $Log*Event ---------- Привилегированные переменные $Log*Event определяют, какие типы событий записываются в журнал событий Windows PowerShell в средстве просмотра событий. По умолчанию в журнал записываются только события обработчика и события поставщика, но при помощи привилегированных переменных Log*Event можно настроить запись в журнал, например, чтобы записывались события, связанные с командами. Привилегированные переменные $Log*Event: $LogCommandHealthEvent. Позволяет записывать в журнал ошибки и исключения, связанные с инициализацией и обработкой команд. Значение по умолчанию = $false (запись в журнал не производится). $LogCommandLifecycleEvent. Задает запись в журнал запуска и остановки команд и командных конвейеров, а также исключений безопасности при обнаружении команд. Значение по умолчанию = $false (запись в журнал не производится). $LogEngineHealthEvent. Задает запись в журнал ошибок и сбоев сеансов. Значение по умолчанию = $true (запись в журнал производится). $LogEngineLifecycleEvent. Задает запись в журнал открытия и закрытия сеансов. Значение по умолчанию = $true (запись в журнал производится). $LogProviderHealthEvent. Задает запись в журнал ошибок поставщика, например ошибок чтения и записи, ошибок поиска и ошибок вызова. Значение по умолчанию = $true (запись в журнал производится). $LogProviderLifecycleEvent. Задает запись в журнал добавления и удаления поставщиков Windows PowerShell. Значение по умолчанию = $true (запись в журнал производится). Чтобы получить сведения о поставщиках Windows PowerShell, введите следующую команду: "get-help about_provider". Чтобы включить Log*Event, введите переменную со значением $true, например: $LogCommandLifeCycleEvent - или: $LogCommandLifeCycleEvent = $true Чтобы отключить тип событий, введите переменную со значением $false, например: $LogCommandLifeCycleEvent = $false События включаются только для текущей консоли Windows PowerShell. Чтобы применить конфигурацию ко всем консолям, сохраните параметры переменных в профиле Windows PowerShell. $MaximumAliasCount ------------------ Определяет допустимое число псевдонимов в сеансе Windows PowerShell. В большинстве случаев достаточно числа по умолчанию, 4096, но при необходимости можно его изменить. Допустимые значения: 1024 - 32768 (Int32) Значение по умолчанию: 4096 Чтобы посчитать число псевдонимов в системе, введите следующую команду: (get-alias).count $MaximumDriveCount ------------------ Определяет допустимое число дисков Windows PowerShell в определенном сеансе. Это число включает в себя диски файловой системы и хранилища данных, предоставленные поставщиками Windows PowerShell и отображаемые как диски, например диски Alias: и HKLM:. Допустимые значения: 1024 - 32768 (Int32) Значение по умолчанию: 4096 Чтобы посчитать число дисков Psdrive в системе, введите следующую команду: (get-psdrive).count $MaximumErrorCount ------------------ Определяет, сколько ошибок сохраняется в журнале ошибок для сеанса. Допустимые значения: 256 - 32768 (Int32) Значение по умолчанию: 256 Объекты, представляющие сохраняемые ошибки, хранятся в автоматической переменной $Error. Эта переменная содержит массив объектов записей об ошибках, один объект на каждую ошибку. Последняя ошибка - первый объект массива ($Error[0]). Чтобы посчитать ошибки в системе, используйте свойство Count массива $Error. Введите следующую команду: $Error.count Чтобы отобразить конкретную ошибку, используйте систему индексов массива. Например, чтобы отобразить последнюю ошибку, введите следующую команду: $Error[0] Чтобы отобразить самую старую сохраненную ошибку, введите следующую команду: $Error[($Error.Count -1] Чтобы отобразить свойства объекта ErrorRecord, введите следующую команду: $Error[0] | format-list -property * -force В данной команде параметр Force переопределяет специальное форматирование объектов ErrorRecord и задает традиционный формат. Чтобы удалить все объекты из журнала ошибок, используйте метод Clear массива ошибок. PS> $Error.count 17 PS> $Error.clear() PS> PS> $Error.count 0 Чтобы получить все свойства и методы массива ошибок, используйте командлет Get-Member с параметром InputObject. При передаче коллекции объектов по конвейеру командлету Get-Member, Get-Member отображает свойства и методы объектов коллекции. При использовании параметра InputObject командлета Get-Member, командлет Get-Member отображает свойства и методы коллекции. $MaximumFunctionCount ------------------ Определяет допустимое число функций в определенном сеансе. Допустимые значения: 1024 - 32768 (Int32) Значение по умолчанию: 4096 Чтобы отобразить функции сеанса, используйте диск Function: Windows PowerShell, предоставляемый поставщиком Function Windows PowerShell. (Чтобы получить дополнительные сведения о поставщике Function, введите команду "get-help function".) Чтобы вывести функции текущего сеанса, введите следующую команду: get-childitem function: Чтобы посчитать функции текущего сеанса, введите следующую команду: (get-childitem function:).count $MaximumHistoryCount ------------------ Определяет, сколько команд сохраняется в журнале команд для текущего сеанса. Допустимые значения: 1 - 32768 (Int32) Значение по умолчанию: 64 Чтобы узнать число команд, сохраненных в текущий момент в журнале команд, введите строку: (get-history).count Чтобы отобразить команду, сохраненную в журнале сеанса, используйте командлет Get-History. Чтобы получить дополнительные сведения, введите команду "get-help about_history". $MaximumVariableCount ------------------ Определяет допустимое число переменных в определенном сеансе, включая автоматические переменные, привилегированные переменные и переменные, создаваемые в командах и скриптах. Допустимые значения: 1024 - 32768 (Int32) Значение по умолчанию: 4096 Чтобы отобразить переменные сеанса, используйте командлет Get-Variable, возможности диска Variable: Windows PowerShell и поставщика Variable Windows PowerShell. Чтобы получить сведения о поставщике Variable, введите команду "get-help variable". Чтобы узнать текущее число переменных в системе, введите следующую команду: (get-variable).count $OFS ---- Output Field Separator. Задает знак, разделяющий элементы массива при преобразовании массива в строку. Допустимые значения: любая строка. Значение по умолчанию: пробел По умолчанию переменная $OFS не существует и знаком-разделител ем для выходных файлов является пробел, но пользователь может добавить эту переменную и присвоить ей в качестве значения любую строку. ПРИМЕРЫ Этот пример показывает, что при преобразовании массива в строку для разделения значений используется пробел. В данном случае массив целых чисел сохраняется в переменной, а затем переменная приводится к типу string. PS> $array = 1,2,3 # Сохраняется массив целых чисел. PS> [string]$array # Массив приводится к типу string. 1 2 3 # Элементы разделяются пробелами Чтобы изменить разделитель, добавьте переменную $OFS, назначив ей значение. Для корректной работы переменная должна называться $OFS. PS> $OFS = "+" # Создается переменная $OFS, ей присваивается значение "+" PS> [string]$array # Команда повторяется 1+2+3 # Элементы разделяются знаками плюс Чтобы восстановить поведение по умолчанию, можно присвоить пробел (" ") в качестве значения переменной $OFS или удалить переменную. Следующая команда удаляет переменную, затем выполняется проверка, что разделителем является пробел. PS> Remove-Variable OFS # Удаление переменной $OFS PS> PS> [string]$array # Команда повторяется 1 2 3 # Элементы разделяются пробелами $OutputEncoding --------------- Определяет метод кодировки, который использует Windows PowerShell при отправке текста другим приложениям. Например, если какое-либо приложение возвращает в Windows PowerShell строки в кодировке Unicode, может потребоваться соответственно изменить значение переменной для корректной отправки символов. Допустимые значения: объекты, унаследованные от класса кодировки, например ASCIIEncoding, SBCSCodePageEncoding, UTF7Encoding, UTF8Encoding, UTF32Encoding и UnicodeEncoding. Значение по умолчанию: объект ASCIIEncoding (System.Text.ASCIIEncoding) ПРИМЕРЫ Этот пример показывает, как настроить работу команды FINDSTR в Windows PowerShell на компьютере, локализованном для языка с символами Unicode, например китайского. Первая команда находит значение переменной $OutputEncoding. Так как значение является объектом кодировки, отображается только его свойство EncodingName. PS> $OutputEncoding.EncodingName # Поиск текущего значения US-ASCII В этом примере команда FINDSTR используется для поиска нескольких китайских символов, которые присутствуют в файле Test.txt. Когда команда FINDSTR запускается в командной строке Windows (Cmd.exe), она находит символы в текстовом файле. Однако при запуске той же команды FINDSTR в Windows PowerShell символы не удается найти, так как Windows PowerShell отправляет их команде FINDSTR как текст в кодировке ASCII вместо кодировки Unicode. PS> findstr <символы_Unicode> # Команда findstr используется для поиска. PS> # Ничего не найдено. Чтобы настроить работу этой команды в Windows PowerShell, присвойте переменной $OutputEncoding значение свойства OutputEncoding консоли, которое основывается на выбранной для Windows локали. Так как свойство OutputEncoding является статическим свойством консоли, следует использовать двойное двоеточие в команде (::). PS> $OutputEncoding = [console]::outputencoding PS> # Присваивается значение, равное значению свойства OutputEncoding консоли. PS> $OutputEncoding.EncodingName Cyrillic (DOS) # Получение результирующего значения. В результате изменения команда FINDSTR сможет найти символы. PS> findstr <символы_Unicode> test.txt: <символы_Unicode> # Команда findstr используется для поиска и находит символы в текстовом файле. $ProgressPreference ------------------- Определяет, как Windows PowerShell реагирует на обновления состояния, созданные скриптом, командлетом или поставщиком, например на индикаторы выполнения, созданные командлетом Write-Progress. Командлет Write-Progress создает индикаторы выполнения, отображающие состояние команды. Допустимые значения: Stop. Индикатор выполнения не отображается. Вместо этого отображается сообщение об ошибке и выполнение прекращается. Inquire. Индикатор выполнения не отображается. Запрашивается разрешение на продолжение. В случае ответа "А" или "Х" отображается индикатор выполнения. Continue. Отображается индикатор выполнения, (по умолчанию) продолжается выполнение. SilentlyContinue. Команда выполняется, но индикатор выполнения не отображается. $PSEmailServer -------------- Задает сервер электронной почты по умолчанию, который используется для отправки сообщений. Эта привилегированная переменная используется командлетами, отправляющими сообщения по электронной почте, например командлетом Send-MailMessage. $PSSessionApplicationName --------------------------- Задает имя приложения по умолчанию для удаленной команды, использующей технологию WS-Management. Системное имя приложения по умолчанию - WSMAN, однако при помощи привилегированной переменной имя по умолчанию можно изменить. Имя приложения - это последний узел в URI подключения. Например, в следующем примере URI имя приложения - WSMAN. http://Server01:8080/WSMAN Имя приложения по умолчанию используется, когда удаленная команда не задает URI подключения или имя приложения. Служба WinRM использует имя приложения для выбора прослушивателя для обслуживания запроса подключения. Значение этого параметра должно соответствовать значению свойства URLPrefix прослушивателя на удаленном компьютере. Чтобы переопределить системные настройки по умолчанию и значение этой переменной, и чтобы выбрать другое имя приложения для конкретного сеанса, используйте параметры ConnectionURI или ApplicationName командлетов New-PSSession, Enter-PSSession или Invoke-Command. Эта привилегированная переменная задается на локальном компьютере, но указывает прослушиватель на удаленном компьютере. Если задаваемое имя приложения не существует на удаленном компьютере, команда установить сеанс завершится с ошибкой. $PSSessionConfigurationName --------------------------- Задает конфигурацию сеанса по умолчанию, которая используется для сеансов PSSession, создаваемых в текущем сеансе. Эта привилегированная переменная задается на локальном компьютере, но определяет конфигурацию сеансов, расположенную на удаленном компьютере. Значение переменной $PSSessionConfigurationName является полным URI ресурса. Значение по умолчанию: https://schemas.microsoft.com/powershell/microsoft.powershell задает конфигурацию сеансов Microsoft.PowerShell на удаленном компьютере. Если задать только имя конфигурации, в начало будет добавлен следующий URI схемы: https://schemas.microsoft.com/powershell/ Можно переопределить значение по умолчанию и выбрать другую конфигурацию для конкретного сеанса, задав параметр ConfigurationName командлетов New-PSSession, Enter-PSSession или Invoke-Command. Изменить значение этой переменной можно в любой момент. Изменяя значение, помните, что выбираемая конфигурация сеансов должна существовать на удаленном компьютере. Если это условие не будет выполнено, команда создать сеанс с определенной конфигурацией завершится с ошибкой. Эта привилегированная переменная не определяет, какие локальные конфигурации сеансов используются при создании удаленными пользователями сеанса, подключаемого к данному компьютеру. Однако можно использовать разрешения для локальных конфигураций сеансов, чтобы задать, кто из пользователей может использовать их. $PSSessionOption ---------------- Задает значения по умолчанию для дополнительных параметров пользователя в удаленном сеансе. Эта настройка параметров переопределяет системные значения по умолчанию для параметров сеанса. Можно также задать пользовательские параметры для конкретного удаленного сеанса при помощи параметра SessionOption в командлетах, создающих сеанс, например New-PSSession, Enter-PSSession и Invoke-Command. Значение параметра SessionOption имеет приоритет перед системными значениями по умолчанию и значениями по умолчанию, заданными в этой переменной. Переменная $PSSessionOption содержит объект PSSessionOption (System.Management.Automation.Remoting.PSSession Object). Каждое свойство объекта представляет параметр сеанса. Например, свойство NoCompression отключает сжатие данных во время сеанса. Чтобы создать привилегированную переменную $PSSessionOption, используйте командлет New-PSSessionOption. Сохраните его выходные данные в переменной с именем $PSSessionOption. Пример: $PSSessionOption = New-PSSessionOption -NoCompression Чтобы использовать привилегированную переменную $PSSessionOption во всех сеансах Windows PowerShell, добавьте команду New-PSSessionOption, которая создает переменную $PSSessionOption, в свой профиль Windows PowerShell. Дополнительные сведения о командлете New-PSSessionOption см. в разделе справки для New-PSSessionOption. Дополнительные сведения об удаленных командах и сеансах см. в разделах about_Remote и about_PSSessions. Дополнительные сведения об использовании профиля см. в разделе about_Profiles. $VerbosePreference ------------------ Определяет, как Windows PowerShell отвечает на подробные сообщения, созданные скриптом, командлетом или поставщиком, например на сообщения, созданные командлетом Write-Verbose. Обычно подробные сообщения описывают действия, произведенные для выполнения команды. По умолчанию подробные сообщения не отображаются, но можно изменить это поведение, отредактировав значение переменной $VerbosePreference. Также можно использовать общий параметр Verbose командлета, чтобы отображать или скрывать подробные сообщения для конкретной команды. Чтобы получить дополнительные сведения, введите команду "get-help about_commonparameters". Допустимые значения: Stop. Отображается подробное сообщение и сообщение об ошибке, выполнение прекращается. Inquire. Отображается подробное сообщение и запрос на продолжение выполнения. Continue. Отображается подробное сообщение, выполнение продолжается. SilentlyContinue. Подробное сообщение не (по умолчанию) отображается. Выполнение продолжается. ПРИМЕРЫ Данные примеры показывают, что происходит при различных значениях переменной $VerbosePreference и использовании общего параметра Verbose для переопределения значения переменной. Этот пример показывает, что произойдет, если задано значение по умолчанию "SilentlyContinue ". PS> $VerbosePreference # Поиск текущего значения. SilentlyContinue PS> Write-Verbose "Тестовое подробное сообщение." PS> # Запись подробного сообщения. # Сообщение не отображается. PS> Write-Verbose "Тестовое подробное сообщение." -verbose ПОДРОБНО: Тестовое подробное сообщение. # Используется параметр Verbose. Этот пример показывает, что произойдет, если задано значение "Continue". PS> $VerbosePreference = "Continue" # Значение изменяется на "Continue". PS> Write-Verbose "Тестовое подробное сообщение." # Запись подробного сообщения. ПОДРОБНО: Тестовое подробное # Сообщение отображается. сообщение. PS> Write-Verbose "Тестовое подробное сообщение." -verbose:$false # Используется параметр Verbose со значением $false. PS> # Сообщение не отображается. Этот пример показывает, что произойдет, если задано значение "Stop". PS> $VerbosePreference = "Stop" # Значение изменяется на "Stop". PS> Write-Verbose "Тестовое подробное сообщение." # Запись подробного сообщения. ПОДРОБНО: Тестовое подробное сообщение. Write-Verbose : Выполнение команды остановлено, так как переменной оболочки "VerbosePreference" присвоено значение Stop. В строке:1 знак:14 + Write-Verbose <<<< "Тестовое подробное сообщение." PS> Write-Verbose "Тестовое подробное сообщение." -verbose:$false # Используется параметр Verbose со значением $false # Сообщение не отображается. Этот пример показывает, что произойдет, если задано значение "Inquire". PS> $VerbosePreference = "Inquire" # Значение изменяется на "Inquire". PS> Write-Verbose "Тестовое подробное сообщение." ПОДРОБНО: Тестовое подробное сообщение. # Запись подробного сообщения. Подтверждение Продолжить выполнение текущей операции? [Y] Да [A] Да для всех [H] Прервать команду [S] Приостановить [?] Справка (по умолчанию "Y"): y PS> Write-Verbose "Тестовое подробное сообщение." -verbose:$false # Используется параметр Verbose. PS> # Сообщение не отображается. $WarningPreference ------------------ Определяет, как Windows PowerShell отвечает на предупреждения, созданные скриптом, командлетом или поставщиком, например на сообщения, созданные командлетом Write-Warning. По умолчанию предупреждения не отображаются, и выполнение продолжается, но можно изменить это поведение, отредактировав значение переменной $WarningPreference. Также можно использовать общий параметр WarningAction командлета, чтобы определить, как Windows PowerShell будет реагировать на предупреждения от конкретной команды. Чтобы получить дополнительные сведения, введите команду "get-help about_commonparameters". Допустимые значения: Stop. Отображается предупреждение и сообщение об ошибке, выполнение прекращается. Inquire. Отображается предупреждение и запрос на продолжение выполнения. Continue. Отображается предупреждение, (по умолчанию) выполнение продолжается. SilentlyContinue. Предупреждение не отображается. Выполнение продолжается. ПРИМЕРЫ Данные примеры показывают, что происходит при различных значениях переменной $WarningPreference и использовании общего параметра WarningAction для переопределения значения переменной. Этот пример показывает, что произойдет, если задано значение по умолчанию "Continue". PS> $WarningPreference # Поиск текущего значения. Continue # Запись предупреждения. PS> Write-Warning "Это действие может привести к удалению данных." ПРЕДУПРЕЖДЕНИЕ: Это действие может привести к удалению данных. # Используется параметр WarningAction командлета PS> Write-Warning "Это действие может привести к удалению данных." -warningaction silentlycontinue Этот пример показывает, что произойдет, если задано значение "SilentlyContinue". PS> $WarningPreference = "SilentlyContinue" # Значение изменяется на "SilentlyContinue". PS> Write-Warning "Это действие может привести к удалению данных." PS> # Запись предупреждения. PS> Write-Warning "Это действие может привести к удалению данных." -warningaction stop # Используется параметр WarningAction для остановки выполнения, когда данная команда генерирует строку "ПРЕДУПРЕЖДЕНИЕ: Это действие может привести к удалению данных". Write-Warning : Выполнение команды остановлено, так как переменной оболочки "WarningPreference" присвоено значение Stop. В строке:1 знак:14 + Write-Warning <<<< "Это действие может привести к удалению данных." -warningaction stop Этот пример показывает, что произойдет, если задано значение "Inquire". PS> $WarningPreference = "Inquire" # Значение изменяется на "Inquire". PS> Write-Warning "Это действие может привести к удалению данных." # Запись предупреждения. ПРЕДУПРЕЖДЕНИЕ: Это действие может привести к удалению данных. Подтверждение Продолжить выполнение текущей операции? [Y] Да [A] Да для всех [H] Прервать команду [S] Приостановить [?] Справка (по умолчанию "Y"): y PS> Write-Warning "Это действие может привести к удалению данных." -warningaction silentlycontinue PS> # Используется параметр WarningAction для изменения # реакции на предупреждение для текущей команды. Этот пример показывает, что произойдет, если задано значение "Stop". PS> $WarningPreference = "Stop" # Значение изменяется на "Stop". PS> Write-Warning "Это действие может привести к удалению данных." # Запись предупреждения. ПРЕДУПРЕЖДЕНИЕ: Это действие может привести к удалению данных. Write-Warning : Выполнение команды остановлено, так как переменной оболочки "WarningPreference" присвоено значение Stop. В строке:1 знак:14 + Write-Warning <<<< "Это действие может привести к удалению данных." PS> Write-Warning "Это действие может привести к удалению данных." -warningaction inquire ПРЕДУПРЕЖДЕНИЕ: Это действие может привести к удалению данных. Подтверждение Продолжить выполнение текущей операции? [Y] Да [A] Да для всех [H] Прервать команду [S] Приостановить [?] Справка (по умолчанию "Y"): # Используется параметр WarningAction для изменения реакции на предупреждение для текущей команды. $WhatIfPreference ------------------ Определяет, включено ли действие WhatIf автоматически для каждой команды, которая его поддерживает. Когда действие WhatIf включено, командлет сообщает, что произойдет при выполнении команды, но не выполняет команду. Допустимые значения: 0. Действие WhatIf автоматически (по умолчанию) не включено. Чтобы включить его вручную, используйте параметр WhatIf команды. 1: Действие WhatIf автоматически включено для каждой поддерживающей его команды. Можно использовать параметр WhatIf со значением False для отключения действия вручную (WhatIf:$false). ПОДРОБНОЕ ОБЪЯСНЕНИЕ Если командлет поддерживает действие WhatIf, он сообщает, что произойдет при выполнении команды вместо фактического выполнения команды. Например, вместо удаления файла test.txt в ответ на команду Remove-Item Windows PowerShell сообщает, что было бы удалено. Последующая команда Get-Childitem подтверждает, что файл не был удален. PS> remove-item test.txt What if: Выполнение операции "Remove-Item" над целевым объектом "C:\test.txt". PS> get-childitem test.txt Каталог: Microsoft.PowerShell.Core\FileSystem::C: Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 7/29/2006 7:15 PM 84 test.txt ПРИМЕРЫ Данные примеры показывают, что происходит при различных значениях переменной $WhatIfPreference. Также примеры показывают, как использовать параметр WhatIf командлета, чтобы переопределить значение переменной для определенной команды. Этот пример показывает, что произойдет, если задано значение по умолчанию "0" (действие не включено). PS> $whatifpreference 0 # Проверка текущего значения. PS> get-childitem test.txt | format-list FullName FullName : C:\test.txt # Проверка существования файла. PS> remove-item test.txt PS> # Удаление файла. PS> get-childitem test.txt | format-list -property FullName # Проверка удаления файла. Get-ChildItem : Не удается найти путь "C:\test.txt", так как он не существует. В строке:1 знак:14 + get-childitem <<<< test.txt | format-list fullname Этот пример показывает результат применения параметра WhatIf, когда переменная $WhatIfPreference имеет значение 0. PS> get-childitem test2.txt | format-list -property FullName FullName : C:\test2.txt # Проверка существования файла. PS> remove-item test2.txt -whatif What if: Выполнение операции "Удаление файла" над целевым объектом "C:\test2.txt". # Используется параметр WhatIf PS> get-childitem test2.txt | format-list -property FullName FullName : C:\test2.txt # Проверка, что файл не был удален Этот пример показывает, что произойдет при значении переменной "1" (действие WhatIf включено). При использовании командлета Remove-Item для удаления файла, командлет Remove-Item отображает путь к удаляемому файлу, но не удаляет файл. PS> $whatifpreference = 1 PS> $whatifpreference 1 # Значение изменяется. PS> remove-item test.txt What if: Выполнение операции "Удаление файла" над целевым объектом "C:\test.txt". # Попытка удалить файл. PS> get-childitem test.txt | format-list FullName FullName : C:\test.txt # Проверка существования файла. Этот пример показывает, как удалить файл, если переменная $WhatIfPreference имеет значение 1. Для этого следует использовать параметр WhatIf со значением $false. PS> remove-item test.txt -whatif:$false # Используется параметр WhatIf со значением $false. Этот пример показывает, что не все командлеты поддерживают поведение WhatIf. В этом примере значение переменной $WhatIfPreference равно 1 (включено), выполняется команда Get-Process, которая не поддерживает действие WhatIf, но команда Stop-Process выполняет действие WhatIf. Поведение WhatIf команды Stop-Process можно переопределить при помощи параметра WhatIf со значением $false. PS> $whatifpreference = 1 # Значение изменяется на "1" PS> get-process winword # Происходит выполнение команды Get-Process. Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 234 8 6324 15060 154 0.36 2312 WINWORD PS> stop-process -name winword What if: Выполнение операции "Stop-Process" над целевым объектом "WINWORD (2312)". # Команда Stop-Process использует поведение WhatIf. PS> stop-process -name winword -whatif:$false PS> # Параметр WhatIf:$false переопределяет поведение. PS> get-process winword Get-Process : Не удается найти процесс с именем winword. Убедитесь, что имя процесса введено правильно, и повторите вызов командлета. В строке:1 знак:12 + get-process <<<< winword # Проверка, что процесс остановлен. СМ. ТАКЖЕ about_Automatic_Variables about_CommonParameters about_Environment_Variables about_Profiles about_Remote about_Scopes about_Variables