![]() 13176 / 4624 / 168
Регистрация: 25.10.2010
Сообщений: 9,413
|
|||||||||||
1 | |||||||||||
Введение в PowerShell08.08.2012, 17:28. Показов 76168. Ответов 8
Метки нет Все метки)
(PowerShell Windows PowerShell — это новая оболочка командной строки на основе задач и язык сценариев. Она специально разработана для администрирования систем. Встроенная в .NET Framework, оболочка Windows PowerShell помогает ИТ-специалистам и опытным пользователям контролировать и автоматизировать процесс администрирования операционной системы Windows и приложений, работающих в системе Windows. Возможности стандартного командного интерпретатора cmd в Windows довольно скудны, особенно по сравнению с командными интерпретаторами Unix: ksh, bash, zsh. В Microsoft это тоже поняли и разработали новую оболочку. Вначале она имела кодовое имя Monad, она же MSH, которая впоследствии была переименована в Windows PowerShell. Используя оболочку Windows PowerShell, администраторы могут управлять системами с помощью отдельных команд или сценариев, автоматизирующих задачи управления. Exchange Server 2007, System Center Operations Manager 2007, System Center Data Protection Manager V2 и System Center Virtual Machine Manager используют оболочку Windows PowerShell для повышения эффективности и производительности. Если вы раньше не слышали о PowerShell – представьте, что командную строку Windows (cmd.exe) и интегрировали с VBScript, сделав её лёгкой в употреблении и позволяющей вам автоматизировать и контролировать задачи по администрированию системы. Оболочка PowerShell - это интерактивный командный интерпретатор. С его помощью можно создавать сценарии, позволяющие администраторам автоматизировать управление системными задачами как на сервере, так и на других компьютерах сети. PowerShell, в отличие от cmd, предоставляющего доступ только к файловой системе, позволяет управлять всей операционной системой и ее приложениями. Например, мы можем работать с реестром Windows как с обычной файловой системой. Технология PowerShell постепенно завоевывает сердца админов, привыкших расходовать время с пользой. Действительно, зачем постоянно тратить время на выполнение одной и той же операции, если ее можно автоматизировать? На PS это сделать легко. К счастью, программирование на PowerShell не сравнить с аналогичной разработкой под bash, а значит, освоить данную вещь сможет даже начинающий программист. В Windows 7 PowerShell обзавелся графической средой разработки. Программировать сценарии стало еще проще и понятней. Среда обладает всеми необходимыми средствами для комфортной разработки (Отладчик, подсветка синтаксиса и т.д.), что делает процесс разработки схожим с созданием приложения в таких средах как Visual Studio. Количество доступных командлетов существенно возросло. Добавились командлеты для получения информации и управления такими службами как: IIS, ActiveDirectory и т.д. Поддержка удаленной работы дарит возможность одновременно выполнять команды на удаленных компьютерах с одного, на котором работает служба. Несмотря на сходство с командной строкой, PowerShell предоставляет значительно больше функций и более гибка в использовании. Вот некоторые полезные команды, которые нужно знать для начала работы в PowerShell: Get-Command - получить список доступных команд; Get-Help - получить справку по указанной команде; Get-Drive - получить список дисков; Set-Location - изменить текущее местоположение (аналог команды cd в cmd); Set-Alias - создать псевдоним для команды; Get-Date - вывести дату. Как и в cmd.exe, поддерживается перенаправление ввода/вывода, например: Get-Date > current-date.txt Работа с текстом Выделите нужный текст с помощью мыши. Нажмите на правую кнопку мыши - произойдет копирование текста в буфер обмена. Поместите курсор в нужное место. Нажмите правую кнопку мыши - произойдет вставка текста из буфера обмена. Команды для работы с файловой системой type - просмотр файла; more - постраничный вывод файла; copy - копирование одного или нескольких файлов; move - перемещение одного или нескольких файлов (или переименование каталога); del - удаление одного или нескольких файлов; ren - переименование файла; attrib - изменение атрибутов файла/каталога (скрытый, системный, только чтение, архивный); fc - сравнение файлов; find - поиск текстовой строки в одном или нескольких файлах; grep - поиск текстовой строки (можно использовать регулярные выражения) в файле или в списке файлов; cd - смена каталога; dir - вывод содержимого каталога; tree - вывод дерева каталогов; md (или mkdir) - создание каталога; rd - удаление каталога или дерева каталогов. Автоматическое завершение ввода команды Используйте клавишу TAB для автоматического завершения ввода команды. Это поможет вам избежать опечаток. С помощью клавиши «Стрелка вверх» можно вызвать последнюю использованную команду, а с помощью клавиши «Home» переместить курсор в начало строки, а затем ввести данные. Вывести содержимое переменной можно, просто напечатав в командной строке $P. Прерывание вывода информации Если на экран выводится много информацию, и вам необходимо прервать эту операцию, то вывод можно прервать комбинацией клавиш CTRL+C. Переменные Переменные всегда должны начинаться в символа $. Сохраняя промежуточные результаты в переменной, вы можете всегда получить к ней доступ для ваших целей. Присвоить значение переменной очень просто:
Команды, исполняемые в Windows PowerShell, могут быть в форме командлетов, которые являются специализированными классами .NET, созданными с целью предоставления функциональности в PowerShell в виде сценариев PowerShell (.PS1) или являются обычными исполняемыми файлами. Если команда является исполняемым файлом, то PowerShell запускает её в отдельном процессе; если это командлет, то он исполняется внутри процесса PowerShell. PowerShell предоставляет интерфейс командной строки, в котором можно вводить команды и отображать выводимые ими данные в текстовом виде. Этот пользовательский интерфейс, базирущийся на стандартном механизме консоли Windows, предоставляет настраиваемый механизм автозавершения команд, но не обладает возможностью подсветки синтаксиса, хотя при желании её можно обеспечить[2]. В PowerShell также можно создавать псевдонимы (англ. alias) для командлетов, которые при вызове преобразуются в оригинальные команды. Кроме того, поддерживаются позиционные и именованные параметры для командлетов. При выполнении командлета работа по привязке значений аргументов к параметрам выполняется самим PowerShell, но при вызове внешних исполняемых файлов аргументы передаются им для самостоятельного разбора. Другое понятие, используемое в PowerShell, — это конвейер (англ. pipeline). Подобно конвейерам в UNIX, они предназначены для объединения нескольких команд путём передачи выходных данных одной команды во входные данные второй команды, используя оператор |. Но в отличие от аналога в UNIX, конвейер PowerShell является полностью объектным, то есть данные между командлетами передаются в виде полноценных объектов соответствующих типов, а не как поток байтов. Когда данные передаются как объекты, содержащиеся в них элементы сохраняют свою структуру и типы между командлетами, без необходимости использования какой либо сериализации или посимвольного разбора данных. Объект также может содержать некоторые функции, предназначенные для работы с данными. Они также становятся доступными для получающего их командлета. Вывод последнего командлета в конвейере PowerShell автоматически передаёт на командлет Write-Host, который создаёт текстовое представление объектов и содержащихся в них данных и выводит его на экран. Так как все объекты PowerShell являются объектами .NET, они содержат метод .ToString(), возвращающий текстовое представление данных объекта. PowerShell использует этот метод для преобразования объекта в текст. Кроме того, он позволяет указать правила форматирования, так что текстовое представление объектов может быть настроено. Однако, с целью поддержания совместимости, если в конвейере используется внешний исполняемый файл, то он получает текстовый поток, представляющий объект, и не интегрируется с системой типов PowerShell. Расширенная система типов (англ. Extended Type System, ETS) PowerShell базируется на системе типов .NET, но реализует некоторые дополнения. Например, она позволяет создавать различные представления объектов, отображая лишь некоторые из их свойств и методов, а также применять специальное форматирование и механизмы сортировки. Эти представления привязываются к оригинальным объектам с помощью конфигурационных файлов в формате XML. PowerShell ISE После удачного выпуска консольной программы PowerShell, разработчики Microsoft сделали графическую консоль/редактор, который называется PowerShell ISE (Integrated Scripting Environment). PowerShell ISE является полноценным редактором с подсветкой кода, закладками, и возможностью выполнения интерактивных команд. Это крайне удобно при написании сценариев: можно легко протестировать команду, и затем добавить её в основной код. Или наоборот выполнить несколько строк выделенных в открытом файле. Кроме этого ISE автодополняет набираемый код по нажатию Tab как в командной строке, так и в файлах скрипта. Естественно автодополняются не только названия команд, но и параметры, имена переменных, и т.д., так же как и в привычной консоли. Еще в ISE встроен отличный отладчик. Вы можете расставлять брейкпойнты (F9), запускать пошаговое выполнение, просматривать содержимое переменных наводя на них курсор, и т.д. В PowerShell ISE доступен специальный объект, $PsISE, с помощью которого можно управлять интерфейсом утилиты, и даже расширять его, например добавляя свои собственные элементы меню. Так как ISE создавался с нуля, для PowerShell, он не страдает болезнями доставшимися PowerShell.exe от консольной подсистемы Windows. Так например он изначально, полностью, стопроцентно поддерживает Unicode, и в нем можно легко менять шрифты, и их размер. Cmdlets Cmdlets (произносится как commandlets) основаны на синтаксе типа глагол-существительное в ед.ч. Команды записываются на английском языке, например, get-service, get-process, stop-service, get-wmiobject. Get-Help вызывает интерактивную справку по синтаксису Windows PowerShell. Get-Help - выводит на экран справку об использовании справки Get-Help * - перечисляет все команды Windows PowerShell Get-Help команда - выводит справку по соответствующей команде Get-Help команда -Detailed - выводит подробную справку с примерами команды В Windows PowerShell также включены псевдонимы многих известных команд. Например, команды help (классический стиль Windows) и man (классический стиль Unix) работают так же, как и Get-Help. Чтобы увидеть весь список, состоящий, из более чем 130 предустановленных cmdlets, наберите в командной строке Чтобы увидеть все процессы, которые начинаются с буквы «w», и все зависящие от них, нужно просто набрать Тестирование программы перед выполнением Windows PowerShell имеет функцию whatif, которая сообщит вам о результате команды, без её исполнения. Например, мы хотим узнать, какие команды начинающиеся с «w3» могут быть остановлены. Получение расшифровки PowerShell позволяет вам получить расшифровку всех ваших команд. Это облегчит тестирование команд, и одновременно сохранят их для последующего исполнения в скриптах. Диски PowerShell PowerShell позволяет получить доступ к различных дискам. Следует иметь в виду, что в качестве дисков могут выступать не только привычные нам объекты файловой системы, но и другие элементы, например, разделы реестра, переменные среды и т.д. Для доступа к этим дискам используется командлет Get-Psdrive, который выводит все диски. Диски выделяются двоеточием после их имени (:). Get-Psdrive cd HKCU: dir или cd ENV: ls или cd CERT: Get-Childitem Как видите, мы используем три варианта вывода содержимого диска dir - как в Windows ls - как в UNIX Get-Childitem - собственный командлет Команды dir, ls и Get-Childitem имеют одинаковые возможности. Это означает, что вы можете использовать те псевдонимы, которые вам больше нравятся. Одно замечание о реестре. По нему можно перемещаться при помощи команд dir и cd, но они не позволяют просмотреть значения ключей реестра. Причина в том, что значения реестра являются свойствами объектов реестра, в то время как размер (Size) или дата последнего изменения (Date last accessed) – это свойства файла. Чтобы увидеть значения реестра, необходима команда Get-ItemProperty. Эта команда выводит все свойства элемента реестра и их значения. Дополнительные сведения можно найти в справке по Windows PowerShell. Псевдонимы Чтобы свести к минимуму количество вводимой информации, PowerShell предлагает различные способы сокращения команд при помощи псевдонимов. Введите Поддержка событий — одна из превосходных особенностей ОС Windows. Всякий раз, когда в операционной системе что-то происходит, она инициирует событие. Приложения могут подписываться на уведомления о конкретных событиях и реагировать на них, например выполнением определенных действий. В частности, при щелчке кнопки в диалоговом окне приложение может получать уведомление о событии «щелчок кнопки» и выполнять все предназначенные для этого события действия. Инициировать события способна также служба Windows Management Instrumentation (WMI), и можно подписать Windows PowerShell версии 2 для получения этих событий. После этого можно задействовать Windows PowerShell для выполнения любых команд, которые должны выполняться в ответ на эти события. Обычно WMI порождает одно из довольно ограниченного числа событий, но это может происходить в одном из огромного количества различных классов WMI. Существуют три ключевых момента использования событий WMI: понимание, какое событие требуется отслеживать понимание класса требуемого события использование командлета Register-WmiEvent для подписки на уведомления о событиях Простые события Инициировать события могут некоторые классы WMI. Например, класс Win32_ProcessStartTrace инициирует события в момент запуска процесса. Он делает то же самое в других ситуациях. Когда инициируется событие создания нового процесса, в качестве идентификатора источника оно содержит «Process Started». Для подписки на события необходимо выполнить следующую команду: Конечно, простая информация о запуске процесса не очень полезна. Скорее всего потребуется определить какие-то действия для регистрации процесса в журнале, отправки сообщения по электронной почте или даже завершения процесса. Выполните командлет Get-EventSubscriber, чтобы увидеть только что созданную подписку на уведомления о событии. Чтобы удалить все подписки на события, выполните команду Get-EventSubscriber | Unregister-Event. Также можно задействовать командлет Unregister-Event, чтобы удалить подписку по ее идентификационному номеру. Полезные события WMI может инициировать и намного более полезные события системного уровня. Например, событие __instancecreationevent инициируется всякий раз, когда создается новый экземпляр класса WMI, а событие __instancedeletionevent — при удалении экземпляра. Это может показаться не совсем полезным, но только подумайте:почти каждый элемент операционной системы и компьютерного оборудования представлен некоторым экземпляром класса WMI. Например, при подключении съемных устройств хранения данных создается новый экземпляр класса Win32_LogicalDisk. А при завершении процесса удаляется экземпляр класса Win32_Process. Хотите отобразить на экране сообщение, когда пользователь подключит внешний USB-диск? Register-wmievent –query "select * from __instancecreationevent within 5 where targetinstance isa 'win32_logicaldisk'" –action { Write "You had better not put any proprietary information on that!" } Этот непростой запрос, поэтому поясним, что он делает: SELECT * FROM __instancecreationevent (кстати, в названии события два подчеркивания) просто указывает, что нужно получить все свойства данного события; WITHIN 5 означает, что надо проверять события каждые 5 секунд. Не задавайте слишком малое число, иначе слишком много вычислительных мощностей будет тратиться на постоянную проверку обновлений; WHERE TARGET INSTANCE ISA 'Win32_LogicalDisk' сообщает WMI, что нужны только события создания нового экземпляра класса Win32_LogicalDisk. Наконец, параметр –action является заключенным в фигурные скобки блоком сценария, который содержит действия, которые нужно выполнить при возникновении данного события. Использование параметра –computerName для подписки на события, которые происходят на удаленном компьютере, — это такая особая уловка. Это связано с тем, что необходимо иметь права локального администратора на удаленном компьютере, а само действие происходить на локальном компьютере. Кстати, не поддавайтесь соблазну подписаться на события создания экземпляра класса CIM_DataFile, который представляет файлы на диске. Служба WMI не очень эффективна для мониторинга создания новых файлов. Скорее всего события будут теряться, а попытки перехватить все события могут создать довольно существенную нагрузку на систему. Предостережения и уловки Конечно, реагирование на события будет продолжаться, пока работает оболочка. При закрытии оболочки или при прекращении ее работы по каким-то иными причинам, регистрация событий прекращается. Это делает события WMI несколько менее полезными для использования на компьютерах пользователей, поскольку вряд ли PowerShell будет всегда работать на каждом компьютере. Однако это очень полезный прием для мониторинга процессов и других компонентов на серверах, где существует больше возможностей для контроля. Из блока сценария –action есть доступ к автоматической переменной $args, которая содержит все аргументы, передаваемые от события. Используйте Write $args в блоке сценария –action, чтобы увидеть, какие аргументы есть у данного события WMI.
13
|
08.08.2012, 17:28 | |
08.08.2012, 17:28 | |
Ответы с готовыми решениями:
8
PowerShell vs PowerShell ISE Введение Введение в IT! |
![]() 13176 / 4624 / 168
Регистрация: 25.10.2010
Сообщений: 9,413
|
|
08.08.2012, 17:28 [ТС] | 2 |
Часто задаваемые вопросы
Как запускать файлы EXE, COM, CMD, BAT Просто укажите полный путь к файлу или только имя файла, если путь к нему содержится в переменной Path Как вызвать скрипт из текущей папки если папка не содержится в переменной Path Укажите полный путь к файлу или используйте .\ для обозначения текущего каталога: .\Test.Ps1 Как использовать переменные окружения? В PowerShell переменные окружения вынесены в специальный диск: Env:\ Чтобы получить содержимое переменной окружения используется следующая конструкция: Write-Host "Добро пожаловать $($env:computername)!" Как выполнить VB Script код в PowerShell (например если вы знаете как что то сделать в VBS, но не знаете как в PowerShell)? $vbs = New-Object -com MSScriptControl.ScriptControl $vbs.Language = "VBScript" $vbs.Eval('msgbox("Привет!")') $code = 'InputBox("Введите ваше имя","Анкета")' $vbs.Eval($code) Как выбрать файлы с размером более 1 Мб dir | where {$_.length -ge 1mb} Все процессы запущенные из папки Windows Get-Process | where {$_.path -like "c:\windows*"} | Stop-Process -whatif Расшаренные диски Get-WmiObject win32_share | where {$_.path -like "?:"} Как посмотреть какие свойства есть у объекта? С помощью команды Get-Member: Используйте Select-String: Get-Content C:\Windows\WindowsUpdate.log | Select-String "error|warning" Get-Content C:\Windows\WindowsUpdate.log | where {$_ -match "error 0x(\d+)"} | foreach {$_.matches[1]} Включить регистр символов Операторы -eq -like -match и т.п. не чувствительны к регистру символов. Припишите к оператору букву "c" (от Case), если регистр важен: "Test" -eq "test" "Test" -ceq "test" Как посмотреть что это за команды - "%", "?", "gps" или "fl"? Get-Command % | fl Get-Command `? | fl Get-Command gps, fl | ft -AutoSize Как изменить приглашение (prompt)? Надо переопределить функцию prompt. Всё что вернёт эта функция будет приглашением. А можно в ней же выполнить и другие команды: function prompt { $host.UI.RawUI.WindowTitle = Get-Location ; $env:username + "@" + $env:computername + ":" + (get-location | split-path -leaf) + "> "} Получить текущий каталог В cmd.exe есть переменная %cd% возвращающая текущий каталог. В PowerShell используется команда $pwd. Кроме того можно получить текущий каталог с помощью команды Get-Location. Как вывести текст, и не переводить курсор на другую строку? Write-Host "Начало строки." -noNewLine; Write-Host " Конец строки." Как изменить фон и цвет шрифта в окне PowerShell? Задать соответствующие свойства объекта $host: $host.UI.RawUI.BackgroundColor = "Black" $host.UI.RawUI.ForegroundColor = "Green" Иногда бывает необходимо выделить результаты при помощи цвета, сделав их удобнее для чтения. Команда Write-Host имеет такие параметры, как -Foregroundcolor и -Backgroundcolor. Write-Host "Ошибка!" -ForegroundColor "Red" Write-Host "Красный текст на синем фоне" -Foregroundcolor red -Backgroundcolor blue Команда Get-Help Write-Host -Detailed даст вам полный список возможных цветов. Более наглядный пример для вывода всех 16 цветов. 0..15 | %{Write-Host " " -back $_ цвет;[System.ConsoleColor]$_} Но, по возможности используйте командлеты Write-Error, Write-Verbose и Write-Warning. Например: Write-Warning "Будьте внимательны" Как изменить цвета других сообщений, например ошибок или предупреждений? Нужно задать соответствующие свойства $host.PrivateData.ErrorForegroundColor $host.PrivateData.WarningForegroundColor $host.PrivateData.VerboseForegroundColor Как создать алиас (псевдоним)? Set-Alias ss Select-String Если необходимо задать параметры для команды, то можно просто создать функцию: function fh ($Topic) {Get-Help $Topic -full | more} А если вы хотите чтобы эти алиасы/функциии сохранились - надо поместить их в свой профиль. Как создать/изменить профиль? Если он уже существует (Test-Path $Profile) то можно открыть его например так: notepad $profile Если же он еще не создан (при установке PowerShell не создает профиль) то можно создать его вот так: $e = Get-Process explorer Write-Host "Путь к проводнику: $e.Path" # не получится Write-Host "Путь к проводнику: $($e.Path)" Write-Host "Путь к проводнику: $((Get-Process explorer).Path)" Write-Host "Дважды два равно $(2 * 2)!" Как посчитать количество объектов в конвейере? Используйте командлет Measure-Object или свойство массивов .Count Get-Process | where {$_.ws -gt 50mb} | Measure-Object (Get-Process | where {$_.ws -gt 50mb}).count Как запустить скрипт из планировщика? Следует запустить C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe с ключем -Command Скрипт Еще полезные ключи powershell.exe: -NoLogo -NonInteractive -NoProfile У командлетов зачастую весьма длинные названия аргументов. Можно не писать их полностью? У большинства команд задан порядок следования аргументов. Если известен этот порядок, то можно вообще не писать названия аргументов: Set-Content -Path test.txt -Value "Text" Set-Content test.txt "Text" Можно дополнять имена аргументов с помощью клавиши табуляции. Можно просто писать только первые несколько букв аргумента, и если у данного командлета нет других аргументов, начинающихся на эти буквы - то сработает: Write-Host test -f red -b blue Get-Command -n process # Не сработает, потому что есть еще аргумент -Name Get-Command -no process # Сработает, потому что это уже точно не -Name Как при написании скрипта или команды перейти на следующую строчку? Используйте символ апострофа: Get-Command ` -Name Explorer Как использовать в строке символы перевода строки, табуляции, и т.п.? С новой строки - `n;`t - табуляция, символ кавычек - `" и апострофа ` - ` В качестве маскирующего символа в PowerShell используется апостроф. Если бы, как обычно, использовался обратный слеш - из PowerShell получился бы ужасный шелл. Как посмотреть справку по команде? Get-Help Get-Help Get-Process Get-Help Get-Process -Full Get-Help Get-Process -Parameter Name Get-Help Get-Process -Examples Как посмотреть справку по конструкции языка или другой теме? Get-Help about_* | Format-List Name, Synopsis Get-Help About_if | more Как подключать расширения PowerShell , например расширение для работы с Exchange 2007 Get-pssnapin -registered | add-pssnapin Каким образом в теле функции определяется результат, который должна вернуть функция? Всё, что не присваивается переменной - возвращается. В общих чертах так. Т.е. function test {"text"} вернёт строку "text" Как управлять групповыми политиками C выходом Windows 7 и Windows Server 2008 R2 появилась возможность не только работать с объектами групповых политик GPO, но делать более сложные вещи: Создавать, удалять, проводить резервное копирование, собирать отчеты и импортировать GPO; Создавать, обновлять и удалять связь объектов групповых политик с контейнерами Active Directory Directory Services; Конфигурировать наследование и права доступа к организационным единицам OU; Настраивать параметры Group Policy Preferences хранящиеся в реестре; Мне действительно нужно выбрать только некоторые строки, например я хочу обработать текстовый файл. Используйте Select-String: Code Snippet Get-Content C:\Windows\WindowsUpdate.log | Select-String "error|warning" Get-Content C:\Windows\WindowsUpdate.log | where {$_ -match "error 0x(\d+)"} | foreach {$_.matches[1]} Все что здесь написано, было найдено в инете два года назад, для написания курсовой работы. Так, что за достоверность данных я поручиться не могу ![]()
0
|
![]() ![]() ![]() |
||||||
08.08.2012, 23:50 | 3 | |||||
А главное, если ни разу не пользовались,
разрешить политику запуска неподписанных скриптов,
Запускаем CMD от имени администратора. Задаем команды:
иначе система проигнорирует самописный файл, или вручную введенную команду. Здесь http://technet.microsoft.com/e... 76949.aspx про:
9
|
Модератор
![]() ![]() 5240 / 2113 / 416
Регистрация: 06.01.2013
Сообщений: 4,844
|
|
13.05.2013, 19:12 | 4 |
К сожалению, разобраться в этом для новичка достаточно сложно, система вложенности методов/свойств едва ли не уникальна для большинства объектов.
1
|
Модератор
![]() ![]() 5240 / 2113 / 416
Регистрация: 06.01.2013
Сообщений: 4,844
|
|
06.12.2013, 21:29 | 6 |
Вот изучаю справку и понимаю, что этот язык невероятно мощный...
0
|
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 13
|
|
04.11.2016, 14:27 | 7 |
Не вижу здесь команды (завис) каким образом преобразовать полученные данные из powershell s текстовый читабельно-удобный формат. Какая команда и как вообще находить нужные команды?
0
|
1 / 1 / 0
Регистрация: 13.11.2017
Сообщений: 4
|
|
08.02.2018, 13:36 | 8 |
Здесь показано, но как-то явно не отмечено, что имена параметров тоже можно сокращать. И их сокращение допустимо не только через использование явно зарегистрированных псевдонимов, как это сделано для командлетов, но и просто использованием любого количества букв из начала имени параметра, достаточного для того, чтоб отличить его от других именованных параметров этого командлета! Именно эта фича позволяет в
ls * -ex *.tmp | select n*, le* писать -ex вместо -Exclude. Проблема в том, что я никак не могу найти про эту фичу в документации!Впрочем, настоящие псевдонимы параметрам тоже можно зарегистрировать - см. про атрибут Alias в тексте, возвращаемом командой Get-Help about_Functions_Advanced_Parameters А писать n* вместо name и le* вместо length в этом примере можно потому, что в параметры Select-Object, Get-Help и многих других командлетов можно передавать шаблоны значений, а не значения (то есть, можно "использовать подстановочные знаки", как это называется в документации. См. Get-Help about_Parameters и Get-Help about_Wildcards ). А в кавычки их можно не заключать, потому что есть режим парсинга аргументов, про что написано в Get-Help about_parsing Так же стоит упомянуть, что подробности про алиасы командлетов, функций, скриптов и файлов есть в тексте, возвращаемом Get-Help about_Aliases
1
|
![]() 6309 / 2151 / 337
Регистрация: 10.12.2013
Сообщений: 7,406
|
||||||||||||||||||||||||||||||||||||||||||||||
01.03.2021, 01:04 | 9 | |||||||||||||||||||||||||||||||||||||||||||||
и что делать вам, когда вы пытаетесь исполнить скрипт на другом языке из-под powershell, а он начинает разбирать строку". Испытуемой исполняемой программой я назначаю perl; во-первых, потому что знаю про ком. строку запуска perl всё возможное и невозможное, во-вторых, потому что perl единственный из языков, кто умеет менять двойные и одинарные кавычки, как перчатки, что облегчает проведение опытов, и, в-третьих, потому что perl имеет схожий с powershell синтаксис, что вносит дополнительную сложность, когда powershell суёт свой нос в содержимое при запуске не только perl, но и l tcl / awk / bash / etc скриптов с $-префиксом в имени переменной. 1) Традиционный для unix-shell запуск однострочника; Одинарные кавычки после опции -e предохраняют пробелы и предлагают shell-интерпретатору воспринимать всю заковыченную строку как один аргумент. Двойные кавычки должны при этом уйти внутрь perl как есть.
А вот что. Одинарные кавычки он сдёрнет ( и это правильно ) и передаст строку в запускаемую программу как один аргумент. И это тоже правильно. Но он сдёрнет также и двойные кавычки и внутрь perl на исполнение уйдёт строка 「print OK, dude\n」 А вот это уже неправильно. Чтобы добиться нужного результата двойные кавычки придётся удвоить;
Для полноты картины засунем perl-скрипт в powershell переменную
print "Hello, dude\n" То есть, внутри переменной $perl_script живёт вполне себе полноценный perl скрипт. Исполняем:
То есть, тот же эффект; powershell сдёрнул двойные кавычки и при использовании переменной вместо литерала. 2) читаем содержимое about_parsing Код
The stop-parsing symbol (--%), introduced in PowerShell 3.0, directs PowerShell to refrain from interpreting input as PowerShell commands or expressions. When calling an executable program in PowerShell, place the stop-parsing symbol before the program arguments. This technique is much easier than using escape characters to prevent misinterpretation. When it encounters a stop-parsing symbol, PowerShell treats the remaining characters in the line as a literal. The only interpretation it performs is to substitute values for environment variables that use standard Windows notation, such as %USERPROFILE%. Пробуем:
Да? Но, нет. Значит powershell опять двойные кавычки сдёрнул. Проверяем:
ОК В документации, стало быть, неточность, двойные кавычки даже после появления в ком. строке значка стоп-разбор--% продолжают интерпретироваться. но в целом применение --% в комплекте с perl может выглядеть интригующе:
800 и даже так:
200 400 600 или так:
200 курей 400 индюшек 600 уток
0
|
01.03.2021, 01:04 | |
01.03.2021, 01:04 | |
Помогаю со студенческими работами здесь
9
Введение в Ассемблер Введение в 1C программирование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Создание каталога и всех родительских каталогов с помощью Python
hw_wired 12.02.2025
Работа с файловой системой - одна из ключевых задач при разработке программного обеспечения. Особенно часто возникает потребность создавать каталоги для хранения файлов, логов, временных данных и. . .
|
Возврат файла к состоянию указанного коммита Git
hw_wired 12.02.2025
Git - распределенная система контроля версий, без которой сложно представить современную разработку программного обеспечения. Когда речь заходит о восстановлении файлов, Git предоставляет целый. . .
|
Сброс локальной ветки Git до состояния HEAD удаленного репозитория
hw_wired 12.02.2025
Работая в команде разработчиков, часто сталкиваешься с ситуацией, когда локальная версия кода существенно отличается от той, что находится в центральном репозитории. Такое расхождение может. . .
|
Запрет подсветки выделения текста с помощью CSS
hw_wired 12.02.2025
Выделение текста - одна из базовых возможностей взаимодействия пользователя с контентом на веб-странице. Однако в некоторых случаях стандартное поведение выделения может нарушать задуманный дизайн. . .
|
Выполнение другой программы из приложения Python
hw_wired 12.02.2025
При разработке современных приложений часто возникает потребность в запуске и взаимодействии с другими программами прямо из кода. Python предоставляет множество эффективных средств для выполнения. . .
|
Отличия между let и var в JavaScript
hw_wired 12.02.2025
Работа с переменными - один из основных моментов при написании программ на JavaScript. От правильного объявления и использования переменных зависит не только читаемость кода, но и его надежность, а. . .
|
Подключение файла JavaScript в других файлах JavaScript
hw_wired 12.02.2025
Самый современный и рекомендуемый способ подключения JavaScript-файлов - использование системы модулей ES6 с ключевыми словами 'import' и 'export'. Этот подход позволяет явно указывать зависимости. . .
|
Отмена изменений, не внесенных в индекс Git
hw_wired 12.02.2025
Управление изменениями в Git - одна из важнейших задач при разработке программного обеспечения. В процессе работы часто возникают ситуации, когда нужно отменить внесенные изменения, которые еще не. . .
|
Что такое px, dip, dp, and sp в Android
hw_wired 12.02.2025
При разработке мобильных приложений для Android одним из ключевых вызовов становится адаптация интерфейса под различные устройства. А ведь их действительно немало - от компактных смартфонов до. . .
|
Отличия POST и PUT в HTTP
hw_wired 12.02.2025
В основе современного интернета лежит протокол HTTP, который определяет правила взаимодействия между клиентами и серверами. Этот протокол предоставляет набор методов, позволяющих клиентам выполнять. . .
|