Работа с фоновыми заданиями
В Windows PowerShell есть возможность запускать задачи в фоновом режиме, для того чтобы, не дожидаясь окончания работы команды (для случаев, когда задача выполняется долго), продолжать работать в текущей сессии. Для работы с фоновыми заданиями в PowerShell есть следующие командлеты:
- Start-Job – запустить фоновую задачу;
- Stop-Job – остановить фоновую задачу
- Get-Job – посмотреть список фоновых задач;
- Receive-Job – посмотреть результат выполнения фоновой задачи;
- Remove-Job – удалить фоновую задачу;
- Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.
Get-PSDrive – универсальный командлет для просмотра свойств всех типов дисков
Командлет Get-PSDrive получает диски в текущем сеансе. Вы можете получить конкретный диск или все диски в сеансе.
Этот командлет получает следующие типы дисков:
- Логические диски Windows на компьютере, включая диски, подключённые к общим сетевым ресурсам.
- Диски, предоставляемые поставщиками PowerShell (например, диски Certificate:, Function:, и Alias:), а также диски HKLM: и HKCU:, предоставляемые поставщиком реестра Windows PowerShell.
- Временные диски, указанные в сеансе, и постоянные подключённые сетевые диски, которые вы создаёте с помощью командлета New-PSDrive.
Начиная с Windows PowerShell 3.0, параметр Persist командлета New-PSDrive может создавать подключённые сетевые диски, которые сохраняются на локальном компьютере и доступны в других сеансах.
Кроме того, начиная с Windows PowerShell 3.0, когда к компьютеру подключается внешний диск, Windows PowerShell автоматически добавляет PSDrive в файловую систему, представляющую новый диск. Вам не нужно перезапускать Windows PowerShell. Точно так же, когда внешний диск отключается от компьютера, Windows PowerShell автоматически удаляет PSDrive, представляющий удалённый диск.
Итак, запустим Get-PSDrive без опций:
Get-PSDrive
Вывод довольно обширный, возможно не вся информация вам требуется.
Для сокращения выводимых данных можно указать интересующий диск:
Get-PSDrive C
Теперь проще разобраться и найти интересующие поля, связанные с количеством занятого и свободного пространства на диске:
- Used — использовано места на диске
- Free — свободно места на диске
Чтобы вывести информацию только о дисках файловой системы, используйте команду:
Get-PSDrive -PSProvider FileSystem
Чтобы вывести только информацию об используемом и свободном пространстве определённого диска выполните команду:
Get-PSDrive C | Select-Object Used,Free
Чтобы сделать вывод более читаемым (выведет только количество свободного пространства на диске):
Get-PSDrive C | Select-Object @{Expression={$_.Free/1GB}}
Следующая команда выведет количество свободного и используемого пространства на диске:
Get-PSDrive C | Select-Object @{Expression={$_.Free/1GB}},@{Expression={$_.Used/1GB}}
Для получения информации об используемом и свободном пространстве диска удалённого компьютера используйте следующую команду (необходим Powershell Remoting):
Invoke-Command -ComputerName SRV2 {Get-PSDrive C} | Select-Object PSComputerName,Used,Free
Работа со службами и процессами
PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:
- Get-Process – выводит информацию о запущенных процессах на компьютере;
- Start-Process – запускает один или несколько процессов на компьютере;
- Stop-Process — останавливает один или несколько запущенных процессов;
- Get-Service – выводит информацию о службах;
- Restart-Service – перезапускает службу;
- Start-Service – запускает службу;
- Stop-Service — останавливает службу;
- Suspend-Service – приостанавливает работу службы;
- Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.
Как перейти на другой диск в командной строке | Сделай все сам
Типовой дистрибутив ОС Windows даже в самых последних версиях содержит инструменты для работы в режиме ручного ввода DOS-команд. Применяя эмулятор DOS дозволено непринужденно обращаться к установленным в компьютере прикладным и системным программам, минуя промежуточные звенья графического интерфейса Windows. Одна из особенно употребительных операций при работе в командной строке – смена диска.
Инструкция
1. Используйте команду cd для перехода на иной диск операционной системы. CD – это сокращенное написание chdir (от CHange DIRectory – «Сменить каталог»). Синтаксис DOS дозволяет применять оба варианта – и cd, и chdir. Полное изложение этой команды дозволено получить непринужденно в терминале, исполнив ее с модификатором /?:chdir /?
2. Добавьте модификатор /d к команде chdir (либо cd), дабы переключиться с ткущего носителя на иной физический либо воображаемый диск. Скажем, если надобно перейти на диск F, то наберите и выполните такую команду:chdir /d F:
3. Используйте обратный слэш (\) в качестве параметра команды chdir, дабы перейти из всякого каталога нынешнего диска в его корень:chdir \
4. Указывайте в дополнение к модификатору /d полный путь от корня надобного диска, если нужно переключиться в какую-то определенную директорию, помещенную на нем. Скажем, дабы перейти в папку с наименованием SubFilder, размещенную на диске F вовнутрь каталога MainFolder, нужно ввести и исполнить в командной строке:chdir /d F:\MainFolder\SubFilder
5. Вводить раз за разом длинные пути к папкам достаточно неудобно. Интерфейс терминала командной строки не дозволяет выделить и скопировать набранный некогда путь, а вот команда вставки скопированного в нем есть.
Дозволено применять в качестве вспомогательного инструмента, скажем, Проводник Windows. Раскрыв в нем надобную папку, выделите и скопируйте в адресной строке полный путь (CTRL + C).
После этого переключитесь в терминал командной строки, щелкните его правой кнопкой мыши и выберите в контекстном меню пункт «Вставить».
6. Заключайте полный путь к надобной папке в кавычки, если он содержит пробелы в наименованиях каталогов. Скажем, так:chdir /d “F:\Program Files\msn gaming zone”Кавычки необходимы не неизменно – только если в операционной системе активированы так называемые «растяжения командного процессора».
7. Отключите растяжения командного процессора, если хотите вводить полные пути без кавычек при переключении на иной диск:cmd e:off
Совет 2: Как перейти на иной диск
В операционной системе всякого пк сегодня существует никак не поменьше 2-х виртуальных либо физических дисков. Операция перехода с одного из них на иной довольно примитивна, но осуществляется по-различному в различных приложениях. Почаще каждого перемещаться с диска на диск доводится в программах-администраторах файлов, реже – в интерфейсе терминала командной строки.
Совет 3: Как переключиться с диска на диск
ОС Windows продолжает сберегать в стандартных дистрибутивах вероятность применять эмулятор команд DOS. Впрочем сейчас изложения работы в командной строке не настоль распространены, и время от времени появляются вопросы о том, какую команду и с каким синтаксисом следует применять для касательно примитивных операций. Один из таких вопросов – как в терминале переключиться на иной диск .
Совет 4: Как в командной строке перейти к папке
В современных операционных системах с графическим интерфейсом для перемещения к требуемой папке применяется по умолчанию программа-администратор файлов. Осуществлять эту операцию в интерфейсе командной строки доводится дюже редко, но каких-то особых умений в этих случаях не требуется, довольно примитивных правил оформления каждого одной DOS-команды.
Вам понадобится
Совет 5: Как перейти на иную работу
В соответствии со статьей 72.1 Трудового кодекса РФ, работник может оформить перевод на другое место работы. В этом случае он должен расторгнуть действующий юридический документ и заключить с потенциальным работодателем новейший договор. Но раньше чем это сделать, нужно оформить некоторые документы.
Вам понадобится
- – заявление о переводе;
- – письмо-запрос от грядущего работодателя.
Работа с элементами
В Windows PowerShell есть командлеты, которые умеют работать с элементами, под элементами здесь можно понимать: файлы, папки, ключи реестра и так далее.
- Clear-Item — очищает содержимое элемента, но не удаляет сам элемент;
- Copy-Item – копирует элемент;
- Get-Item — получает элемент в указанном месте;
- Invoke-Item — выполняет действие по умолчанию над указанным элементом;
- Move-Item – перемещает элемент;
- New-Item – создает новый элемент;
- Remove-Item – удаляет указанные элементы;
- Rename-Item — переименовывает элемент в пространстве имен поставщика Windows PowerShell;
- Set-Item — изменяет элемент;
- Get-ChildItem — возвращает элементы и дочерние элементы в одном или нескольких определенных местах;
- Get-Location – выводит информацию о текущем местонахождении.
Работа с объектами
Так как PowerShell работает с объектами, он позволяет выполнять некие действия над этими объектами, например:
- Measure-Object – командлет позволяет рассчитывать на основе свойств объектов такие числовые агрегирующие параметры как: минимальное, максимальное, среднее значение, сумму и количество. Например, Вы хотите узнать максимальный или средний размер файла в определенном каталоге, или просто узнать количество файлов (запущенных процессов, служб и так далее);
- Select-Object – с помощью данного командлета можно выбрать определенные объекты или свойства этих объектов, например Вы хотите выводить только название файла и его размер;
- Sort-Object — сортирует объекты по значениям свойств;
- Where-Object – командлет для того чтобы ставить условие для выборки объектов на основе значений их свойств;
- Group-Object – группирует объекты, которые содержат одинаковое значение для заданных свойств;
- ForEach-Object – перебор объектов с целью выполнения определенной операции над каждым из этих объектов.
Полезные командлеты Windows PowerShell
В данном разделе я перечислю командлеты PowerShell, которые Вы точно будете использовать.
- Get-Help – показывает справку по командлету, функции и общую справку по Windows PowerShell. Справка бывает нескольких типов: краткая, детальная, полная и вывод только примеров;
- Update-Help — загружает и устанавливает новые файлы справки, т.е. обновление справки;
- Get-Command – командлет поиска нужной команды, можно искать как по глаголу, так и по существительному, также возможно использование маски, если Вы не знаете точное наименование глагола или существительного;
- Get-Alias – показывает псевдонимы, все или конкретной команды;
- Get-PSDrive – показывает подключенные диски;
- Get-Member – выводит свойства и методы, которые есть у объекта;
- Get-WindowsFeature – выводит сведения о доступных ролях и компонентах сервера;
- Install-WindowsFeature (эквивалентен Add-WindowsFeature) — устанавливает роли или компоненты на указанный сервер;
- Uninstall-WindowsFeature (эквивалентен Remove-WindowsFeature) – удаляет роли или компонента сервера;
- Get-History — возвращает список команд, введенных в ходе текущей сессии.
Рекомендации по именованию команд
Следующие рекомендации помогут выбрать подходящую команду для командлета, чтобы обеспечить согласованность между создаваемыми вами командлетами, командлетами, предоставляемыми PowerShell, и командлетами, разработанными другими пользователями.
- Используйте одно из стандартных имен команд, предоставленных PowerShell.
- Используйте команду, чтобы описать общую область действия, и параметры для уточнения действия командлета.
- Не используйте синоним утвержденной команды. Например, всегда используйте , а не или .
- Используйте команду только в той форме, которая указана в этом разделе. Например, используйте , но не или .
- Не используйте следующие зарезервированные команды или псевдонимы. Язык PowerShell и лишь некоторые из его командлетов используют эти команды в исключительных обстоятельствах.
- ForEach (foreach)
- Format (f): упорядочивает объекты в указанной форме или макете
- Group (gp): упорядочивает или связывает один или несколько ресурсов
- Ping (pi)
- Sort (sr)
- Tee (te)
- Where (wh)
Полный список команд можно получить с помощью командлета .
Дополнительные и универсальные методы запуска оболочки
Существуют еще совсем специфические методы открытия оболочки с мощным языком от Microsoft. Самый топорный, это просто найти исполняемый файл и запустить его прямо из расположения в системе. Переходим в вашей Windows 10 по пути:
C:\Users\имя пользователя\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
В итоге у вас откроется папка с ярлыками, которые присутствуют в меню «Пуск», можете их запускать.
Еще можно запустить оригинальный, исполняемый файл, который лежит по пути:
C:\Windows\System32\WindowsPowerShell\v1.0
И кликнув по нему правым кликом, вы можете его загружать от имени администратора, с максимальными правами.
Так же вы можете запустить виндоус PowerShell и из окна командной строки, для этого просто введите в нем волшебное слово и нажмите Enter.
Ну и еще напомню метод, запуска новой задачи из оснастки «Диспетчер задач». Откройте «Диспетчер задач», выберите пункт меню «Файл — Запустить новую задачу»
В появившемся окне введите PowerShell.
Ну и последний известный мне метод, это запуск PowerShell, через проводник Windows 10, для этого откройте проводник, выберите пункт меню «Файл — запустить Windows PowerShell», тут будут оба режима.
Импорт и экспорт
PowerShell позволяет импортировать и экспортировать данные в разных распространенных форматах, например, CSV или XML, а также перенаправлять вывод результата работы команды во внешний файл или на принтер.
- Export-Csv – экспорт данных в формат CSV;
- Import-Csv – импортирует данные из CSV файла;
- Export-Clixml — экспорт данных в формат XML;
- Import-Clixml — импортирует файл CLIXML и создает соответствующие объекты в оболочке Windows PowerShell;
- Out-File — посылает вывод результата работы командлета во внешний файл (например, в TXT);
- Out-Printer — вывод результата работы команды на принтер;
- Import-Module — добавляет модули в текущей сессии.
Работа с сетью в Windows PowerShell
Для администрирования сети в Windows PowerShell существуют такие командлеты как:
- Disable-NetAdapter – командлет отключает сетевой адаптер;
- Enable-NetAdapter – данный командлет включает сетевой адаптер;
- Rename-NetAdapter — переименовывает сетевой адаптер;
- Restart-NetAdapter — перезапускает сетевой адаптер;
- Get-NetIPAddress – выводит информацию о конфигурации IP-адреса;
- Set-NetIPAddress — изменяет конфигурацию IP-адреса;
- New-NetIPAddress — создает и настраивает IP-адрес;
- Remove-NetIPAddress — удаляет IP-адрес и его конфигурацию;
- Get-NetRoute — выводит таблицу маршрутизации IP;
- Set-NetRoute — изменяет таблицу маршрутизации IP;
- New-NetRoute — создает запись в таблице маршрутизации IP;
- Remove-NetRoute — удаляет одну или несколько записей (IP маршрутов) из таблицы маршрутизации IP;
- Get-NetIPv4Protocol — выводит информацию о конфигурации протокола IPv4;
- Get-NetIPv6Protocol — выводит информацию о конфигурации протокола IPv6;
- Get-NetIPInterface — выводит информацию о свойствах интерфейса IP;
- Get-NetTCPSetting — показывает информацию о настройках и конфигурации TCP;
- Test-Connection – командлет посылает ICMP пакеты к одному или нескольким компьютерам, т.е. «пингует» компьютеры.
Команды жизненного цикла
PowerShell использует класс System.Management.Automation.VerbsLifeCycle для определения действий, которые применяются к жизненному циклу ресурса. В следующей таблице перечислено большинство определенных команд.
Команда (псевдоним) | Действие | Неподходящие синонимы |
---|---|---|
Approve (ap) | Утверждает или одобряет состояние ресурса или процесса. | |
Assert (as) | Подтверждает состояние ресурса. | Certify |
Build (bd) | Создает артефакт (обычно двоичный код или документ) из набора входных файлов (обычно это исходный код или декларативные документы). Эта команда добавлена в PowerShell 6. | |
Complete (cp) | Завершает операцию. | |
Confirm (cn) | Подтверждает или проверяет состояние ресурса или процесса. | Acknowledge, Agree, Certify, Validate, Verify |
Deny (dn) | Отклоняет объекты и блоки или препятствует состоянию ресурса или процесса. | Block, Object, Refuse, Reject |
Deploy (dp) | Отправляет приложение, веб-сайт или решение на удаленный целевой объект таким образом, чтобы потребитель этого решения мог получить к нему доступ после завершения развертывания. Эта команда добавлена в PowerShell 6. | |
Disable (d) | Настраивает для ресурса недоступное или неактивное состояние. Например, командлет деактивирует точку останова. Эта команда образует пару с командой . | Halt, Hide |
Enable (e) | Настраивает для ресурса доступное или активное состояние. Например, командлет активирует точку останова. Эта команда образует пару с командой . | Start, Begin |
Install (is) | Помещает ресурс в расположение и при необходимости инициализирует его. Эта команда образует пару с командой . | Настройка |
Invoke (i) | Выполняет действие, например запуск команды или метода. | Run, Start |
Register (rg) | Создает запись для ресурса в репозитории, например в базе данных. Эта команда образует пару с командой . | |
Request (rq) | Запрашивает ресурс или разрешения. | |
Restart (rt) | Останавливает операцию и запускает ее снова. Например, командлет останавливает, а затем запускает службу. | Перезапуск |
Resume (ru) | Запускает приостановленную операцию. Например, командлет запускает приостановленную службу. Эта команда образует пару с командой . | |
Start (sa) | Инициирует операцию. Например, командлет запускает службу. Эта команда образует пару с командой . | Launch, Initiate, Boot |
Stop (sp) | Прекращение действия. Эта команда образует пару с командой . | End, Kill, Terminate, Cancel |
Submit (sb) | Представляет ресурс для утверждения. | Опубликовать |
Suspend (ss) | Приостанавливает действие. Например, командлет приостанавливает службу. Эта команда образует пару с командой . | Пауза |
Uninstall (us) | Удаляет ресурс из указанного расположения. Эта команда образует пару с командой . | |
Unregister (ur) | Удаляет запись для ресурса из репозитория. Эта команда образует пару с командой . | Удалить |
Wait (w) | Приостанавливает операцию, пока не произойдет указанное событие. Например, командлет приостанавливает операции до тех пор, пока не завершится выполнение одного или нескольких фоновых заданий. | Sleep, Pause |
Просмотр
- Как включить удаленное взаимодействие PowerShell?
- Какая команда PowerShell используется для запуска интерактивного сеанса с удаленным компьютером?
- В чем преимущество использования сеанса удаленного взаимодействия PowerShell по сравнению с простым указанием имени компьютера с помощью каждой команды?
- Можно ли использовать сеанс удаленного взаимодействия PowerShell с сеансом удаленного взаимодействия «один к одному»?
- Чем отличается тип объектов, возвращаемых командлетами, от типа объектов, которые возвращаются при выполнении этих же командлетов на удаленных компьютерах с ?
Работа с объектами
Так как PowerShell работает с объектами, он позволяет выполнять некие действия над этими объектами, например:
- Measure-Object – командлет позволяет рассчитывать на основе свойств объектов такие числовые агрегирующие параметры как: минимальное, максимальное, среднее значение, сумму и количество. Например, Вы хотите узнать максимальный или средний размер файла в определенном каталоге, или просто узнать количество файлов (запущенных процессов, служб и так далее);
- Select-Object – с помощью данного командлета можно выбрать определенные объекты или свойства этих объектов, например Вы хотите выводить только название файла и его размер;
- Sort-Object — сортирует объекты по значениям свойств;
- Where-Object – командлет для того чтобы ставить условие для выборки объектов на основе значений их свойств;
- Group-Object – группирует объекты, которые содержат одинаковое значение для заданных свойств;
- ForEach-Object – перебор объектов с целью выполнения определенной операции над каждым из этих объектов.
Перебор объектов
Командлет: ForEach-Object
В данном случае объекты — это диски. Задача формулируется примерно так: отобразить сведения о диске, затем информацию о его разделах, и так для каждого диска.
Get-Disk | ForEach-Object { $_ | Format-Table -AutoSize Number,FriendlyName,Size,PartitionStyle Get-Partition -DiskNumber $_.number | Format-Table -AutoSize ` PartitionNumber,DriveLetter,Size,Offset,IsBoot,IsSystem,Type }
Этот код собирает информацию о всех дисках с помощью Get-Disk и перенаправляет ее командлету ForEach-Object для перебора. Для текущего объекта $_ выводится информация о дисках, а затем — о разделах с помощью Disk-Partition. У него параметр -Number принимает свойство $_.Number, т.е. номер текущего диска.
Number FriendlyName Size PartitionStyle ------ ------------ ---- -------------- 0 Samsung SSD 840 PRO Series 256060514304 MBR PartitionNumber DriveLetter Size Offset IsBoot IsSystem Type --------------- ----------- ---- ------ ------ -------- ---- 1 367001600 1048576 False True IFS 2 C 230084837376 368050176 True False IFS
Результат уже похож на правду, но надо сделать понятные заголовки столбцов!
Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах
Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.
В самом просто случае имена компьютеров, на которых нужно выполнить команды указываются через запятую:
Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
1 | Invoke-Command server1,server2,server3-ScriptBlock{get-date} |
Список компьютеров можно поместить в переменную (массив):
$servers = @(″server1″,″server2″,″server3″)
Invoke-Command -ScriptBlock { get-date} -ComputerName $servers
1 |
$servers=@(″server1″,″server2″,″server3″) Invoke-Command-ScriptBlock{get-date}-ComputerName$servers |
Или получить из текстового файла:
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName(Get-Content c:\ps\servers.txt)
1 | Invoke-Command-ScriptBlock{Restart-Service spooler}-ComputerName(Get-Contentc\ps\servers.txt) |
Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:
Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:
$computers = (Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name
Invoke-Command -ComputerName $computers -ScriptBlock {get-date} -ErrorAction SilentlyContinue
1 |
$computers=(Get-ADComputer-Filter’operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name Invoke-Command-ComputerName$computers-ScriptBlock{get-date}-ErrorAction SilentlyContinue |
Если компьютер выключен, или недоступен, благодаря параметру SilentlyContinue скрипт не будет остановлен и продолжит выполнение на других компьютерах.
Чтобы понять с какого компьютера получены результаты, нужно использовать специальную переменную окружения PSComputerName.
$results = Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
$results | Select-Object PSComputerName, DateTime
1 |
$results=Invoke-Command server1,server2,server3-ScriptBlock{get-date} $results|Select-ObjectPSComputerName,DateTime |
При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).
Для запуска команд на удаленных компьютерах через Invoke-Command в фоновом режиме используется специальный атрибут
–AsJob. В этом случае результат выполнения команды не возвращается в консоль. Чтобы получить результаты нужно использовать командлет
Receive-Job.
Ограничения и проблемы
Скрипт службы должен запускаться в оболочке, выполняемой с правами администратора, а иначе вы будете получать разнообразные ошибки из-за отказа в доступе.
Пример скрипта работает в Windows версий от XP до 10 и в соответствующих серверных версиях. В Windows XP вы должны установить Windows PowerShell v2, который по умолчанию отсутствует. Скачайте и установите Windows Management Framework v2 for XP (bit.ly/1MpOdpV), включающую Windows PowerShell v2. Заметьте, что я очень мало тестировал в этой ОС, поскольку она больше не поддерживается.
Во многих системах выполнение скриптов Windows PowerShell запрещено по умолчанию. Если вы получаете ошибку наподобие «выполнение скриптов отключено в этой системе» при попытке запустить PSService.ps1, то используйте:
Более подробные сведения см. во врезке «Ссылки».
Очевидно, такой скрипт службы, как этот, не может сравниться по производительности с компилированной программой. Скрипт службы, написанный в Windows PowerShell, очень удобен для проверки концепции и для задач с низкими издержками в отношении производительности вроде мониторинга системы, кластеризации служб и т. д. Но для любой высокопроизводительной задачи рекомендуется переписать службу на C++ или C#.
Кроме того, объем занимаемой памяти превышает таковой у скомпилированной программы, так как требует загрузки полнофункционального интерпретатора Windows PowerShell в сеансе System. Но в современных компьютерах со многими гигабайтами памяти это не имеет особого значения.
Этот скрипт не имеет абсолютно никакого отношения к PsService.exe от Марка Руссиновича (Mark Russinovich). Я выбрал имя PSService.ps1 до того, как узнал о совпадении имен. В конечном счете я сохранил имя скрипта-примера таким, поскольку оно делает понятным предназначение скрипта. Конечно, если вы планируете поэкспериментировать со своей службой на основе Windows PowerShell, то должны переименовать его, чтобы получить уникальное имя службы из уникального базового имени скрипта!
Ссылки
- Введение в Windows-службы (bit.ly/1UOBJJY);
- Как создавать Windows-службы (bit.ly/1VJCnJo);
- Класс ServiceBase (bit.ly/1UOC13y);
- Управление службами (bit.ly/1VJCZyG);
- Как отлаживать Windows-службы (bit.ly/1RjEhPg).
Жан-Франсуа Лавуа (Jean-François Larvoire) работает на Hewlett-Packard Enterprise в Гренобле (Франция). В течение более 30 лет занимается разработкой программного обеспечения для BIOS персональных компьютеров, драйверов для Windows и для системного управления Windows и Linux. С ним можно связаться по адресу jf.larvoire@hpe.com.
Выражаю благодарность за рецензирование статьи эксперту JDH IT Solutions Джеффри Хиксу (Jeffery Hicks).
Как работают в Powershell сетевые диски
В Powershell по умолчанию существует возможность обратиться по сетевому пути не используя сетевые диски. Например это можно сделать через команду ‘Get-ChildItem’:
Такой способ ограничен пользователем, который открыл консоль или запустил скрипт. Если вы запустите консоль от имени доменного администратора — то обращение к сетевому пути будет от его имени.
Возможность использовать другие учетные записи, а так же подключать сетевые диски, реализованы в 2 командах:
- New-SmbMapping — команда появилась в версии Powershell 5. Относится к модулю SmbShare, то есть создана специально для работы с SMB;
- New-PSDrive — работает с версии Powershell 3. Все командлеты типа ‘PSDrive’ относятся ко всем дискам.
Обе команды, аналогично Get-ChildItem, подключают диски под учетной записью, которая запустила консоль.
Хоть эти команды достаточно старые, в каждой из новых версий Powershell находятся ошибки и баги. На момент написания статьи баги были найдены в версиях 5.1 — 7.1 и все они касались процесса подключения.
Основной момент, который упростит работу с сетевыми папками в Powershell кроется в понимании понятии провайдеров. Создавая сетевой диск обычными средствами Windows вы сразу видите результат в проводнике. Делая то же самое в Powershell вы изначально обращаетесь к провайдеру услуг, а он обращается к Windows. В зависимости от указанных вами параметров и возможностью команды у вас может быть создан диск только в рамках этого провайдера либо в рамках провайдера и области Windows.
Если это сложно понять, то представьте, что среда Windows и Powershell это разные вещи и что бы скопировать файл с одного места на другое — нужно использовать дополнительный параметр, которого может и не быть.
Похожие команды для различных действий
Следующие похожие команды представляют различные действия.
New и Присвойте параметру
Чтобы создать новый ресурс, используйте команду . Используйте команду , чтобы изменить существующий ресурс, при необходимости создав его, если он не существует, например командлет .
Get и Чтение
Используйте команду для получения сведений о ресурсе (например, файле) или объекта, с помощью которого можно получить доступ к ресурсу в будущем. Используйте команду, чтобы открыть ресурс и извлечь сведения, содержащиеся в.
Invoke и Запуск
Используйте команду для выполнения синхронных операций, таких как выполнение команды и ожидание ее завершения. Используйте команду для запуска асинхронных операций, таких как Запуск автономного процесса.
Установка из Microsoft Store
PowerShell 7.2 можно установить из Microsoft Store. Этот выпуск PowerShell можно найти на сайте Microsoft Store или в приложении Store в ОС Windows.
Пакет Microsoft Store обеспечивает следующие преимущества:
- автоматические обновления, встроенные непосредственно в Windows;
- интеграция с другими механизмами распространения программного обеспечения, такими как Intune и SCCM.
Известные ограничения
По умолчанию пакеты Microsoft Store запускаются в песочнице приложений, которая виртуализирует доступ к некоторым разделам реестра и файловой системы. Изменения виртуальных папок с файлами и разделов реестра сохраняются только внутри песочницы приложений.
Песочница блокирует любые изменения в корневой папке приложения. Параметры конфигурации системного уровня, хранящиеся в , нельзя изменить. Это относится и к конфигурации WSMAN. Это означает, что вы не сможете подключать удаленные сеансы к установкам PowerShell на основе хранилища. Поддерживаются конфигурации уровня пользователя и удаленное взаимодействие по SSH.
Следующим командам требуется запись в . Экземпляр PowerShell из Microsoft Store не поддерживает эти команды.
Подробнее см. Основные сведения о работе упакованных классических приложений в Windows.
Изменения в PowerShell 7.2
Начиная с версии PowerShell 7.2, для пакета PowerShell больше не действует виртуализация файлов и реестра. Изменения виртуальных папок с файлами и разделов реестра теперь будут сохраняться вне песочницы приложений. Однако изменения в корневой папке приложения по-прежнему блокируются.
Важно!
Данное исключение действует только в сборках Windows от 1903 и выше.