Загрузочный диск Windows powershell

Обновлено: 21.11.2024

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

Функции точечного поиска

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

Следующая функция сохранена как Get-MrPSVersion.ps1 .

При запуске скрипта ничего не происходит.

Если вы попытаетесь вызвать функцию, она выдаст сообщение об ошибке.

Вы можете определить, загружены ли функции в память, проверив, существуют ли они на функциональном PSDrive.

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

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

Также можно использовать полный путь.

Если часть пути хранится в переменной, ее можно объединить с остальной частью пути. Нет причин использовать конкатенацию строк для объединения переменной с остатком пути.

Теперь, когда я проверяю функцию PSDrive, функция Get-MrPSVersion существует.

Модули сценариев

Модуль скрипта в PowerShell — это просто файл, содержащий одну или несколько функций, который сохраняется как файл .PSM1, а не как файл .PS1.

Как создать модуль скрипта? Вы, вероятно, догадались, что это команда с именем вроде New-Module. Ваше предположение было бы неверным. Хотя в PowerShell есть команда New-Module, она создает динамический модуль, а не модуль сценария. Всегда обязательно читайте справку по команде, даже если вы думаете, что нашли нужную команду.

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

Еще раз повторим, хотя в предыдущем примере использовался командлет New-Module, это не команда для создания модулей сценариев в PowerShell.

Сохраните следующие две функции в файле с именем MyScriptModule.psm1.

Попробуйте вызвать одну из функций.

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

Вы можете вручную импортировать файл с помощью командлета Import-Module.

Функция автозагрузки модуля появилась в PowerShell версии 3. Чтобы воспользоваться преимуществами автозагрузки модуля, модуль скрипта необходимо сохранить в папке с тем же базовым именем, что и у файла .PSM1, и в расположении, указанном в $env: PSModulePath .

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

Первые три пути в списке используются по умолчанию. При установке SQL Server Management Studio добавляется последний путь. Чтобы автозагрузка модуля работала, файл MyScriptModule.psm1 должен находиться в папке с именем MyScriptModule непосредственно внутри одного из этих путей.

Не так быстро. Для меня мой текущий путь пользователя не является первым в списке. Я почти никогда не использую этот путь, так как я вхожу в Windows под другим пользователем, а не под тем, который использую для запуска PowerShell. Это означает, что он не находится в моей обычной папке «Документы».

Второй путь — путь AllUsers. Здесь я храню все свои модули.

Третий путь находится под C:\Windows\System32. Только Microsoft может хранить модули в этом месте, так как оно находится в папке операционной системы.

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

Манифесты модуля

Все модули должны иметь манифест модуля. Манифест модуля содержит метаданные о вашем модуле. Расширение файла для файла манифеста модуля — .PSD1. Не все файлы с расширением .PSD1 являются манифестами модулей. Их также можно использовать для таких вещей, как хранение экологической части конфигурации DSC. New-ModuleManifest используется для создания манифеста модуля. Путь — единственное необходимое значение. Однако модуль не будет работать, если не указан RootModule.Рекомендуется указать автора и описание на случай, если вы решите загрузить свой модуль в репозиторий NuGet с помощью PowerShellGet, поскольку эти значения необходимы в этом сценарии.

Версия модуля без манифеста — 0.0. Это явный признак того, что у модуля нет манифеста.

Можно создать манифест модуля со всей рекомендуемой информацией.

Если какая-либо из этих сведений отсутствует при первоначальном создании манифеста модуля, ее можно добавить или обновить позже с помощью Update-ModuleManifest . Не создавайте заново манифест с помощью New-ModuleManifest после того, как он уже создан, потому что идентификатор GUID изменится.

Определение общедоступных и частных функций

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

Если вы не следуете рекомендациям и у вас есть только файл .PSM1, единственным вариантом является использование командлета Export-ModuleMember.

В предыдущем примере пользователям вашего модуля доступна только функция Get-MrPSVersion, а функция Get-MrComputerName доступна для других функций в самом модуле.

Если вы добавили манифест модуля в свой модуль (а вам следует это сделать), я рекомендую указать отдельные функции, которые вы хотите экспортировать, в разделе FunctionsToExport манифеста модуля.

Нет необходимости использовать как Export-ModuleMember в файле .PSM1, так и раздел FunctionsToExport манифеста модуля. Одного или другого достаточно.

Обзор

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

Диск Windows PowerShell — это место хранения данных, к которому вы можете получить доступ, как к диску файловой системы в Windows PowerShell. Поставщики Windows PowerShell создают для вас некоторые диски, такие как диски файловой системы (включая C: и D:), диски реестра (HKCU: и HKLM:) и диск сертификата (Cert:), и вы можете создать свой собственные диски Windows PowerShell. Эти диски очень полезны, но они доступны только в Windows PowerShell. Вы не можете получить к ним доступ с помощью других инструментов Windows, таких как File Explorer или Cmd.exe.

Windows PowerShell использует существительное PSDrive для команд, работающих с дисками Windows PowerShell. Чтобы получить список дисков Windows PowerShell в сеансе Windows PowerShell, используйте командлет Get-PSDrive.

Несмотря на то, что диски на дисплее различаются в зависимости от дисков в вашей системе, список будет выглядеть так же, как вывод команды Get-PSDrive, показанный выше.

Диски файловой системы – это подмножество дисков Windows PowerShell. Вы можете идентифицировать диски файловой системы по записи FileSystem в столбце Provider. (Диски файловой системы в Windows PowerShell поддерживаются поставщиком Windows PowerShell FileSystem.)

Чтобы увидеть синтаксис командлета Get-PSDrive, введите команду Get-Command с параметром Syntax:

Параметр PSProvider позволяет отображать только те диски Windows PowerShell, которые поддерживаются конкретным поставщиком. Например, чтобы отобразить только те диски Windows PowerShell, которые поддерживаются поставщиком файловой системы Windows PowerShell, введите команду Get-PSDrive с параметром PSProvider и значением FileSystem:

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

Вы также можете использовать стандартные командлеты Location с дисками Windows PowerShell:

Добавление новых дисков Windows PowerShell (New-PSDrive)

Вы можете добавить собственные диски Windows PowerShell с помощью команды New-PSDrive. Чтобы получить синтаксис команды New-PSDrive, введите команду Get-Command с параметром Syntax:

Чтобы создать новый диск Windows PowerShell, необходимо указать три параметра:

Имя диска (можно использовать любое допустимое имя Windows PowerShell)

PSProvider (используйте «FileSystem» для расположений файловой системы и «Registry» для расположений реестра)

Корень, то есть путь к корню нового диска

Например, вы можете создать диск с именем «Офис», сопоставленный с папкой, содержащей приложения Microsoft Office на вашем компьютере, например C:\Program Files\MicrosoftOffice\OFFICE11 . Чтобы создать диск, введите следующую команду:

Как правило, в путях не учитывается регистр.

Вы обращаетесь к новому диску Windows PowerShell так же, как и ко всем дискам Windows PowerShell — по его имени, за которым следует двоеточие ( : ).

Диск Windows PowerShell может значительно упростить многие задачи.Например, некоторые из наиболее важных ключей в реестре Windows имеют очень длинные пути, что затрудняет доступ к ним и затрудняет их запоминание. Критическая информация о конфигурации находится в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion. Чтобы просмотреть и изменить элементы в разделе реестра CurrentVersion, вы можете создать диск Windows PowerShell с корнем в этом разделе, набрав:

Затем вы можете изменить местоположение на диск cvkey:, как и на любой другой диск:

Командлет New-PsDrive добавляет новый диск только в текущий сеанс Windows PowerShell. Если вы закроете окно Windows PowerShell, новый диск будет потерян. Чтобы сохранить диск Windows PowerShell, используйте командлет Export-Console для экспорта текущего сеанса Windows PowerShell, а затем используйте параметр PowerShell.exe PSConsoleFile для его импорта. Или добавьте новый диск в свой профиль Windows PowerShell.

Удаление дисков Windows PowerShell (Remove-PSDrive)

Вы можете удалить диски из Windows PowerShell с помощью командлета Remove-PSDrive. Командлет Remove-PSDrive прост в использовании; чтобы удалить определенный диск Windows PowerShell, достаточно указать имя диска Windows PowerShell.

Например, если вы добавили диск Office: Windows PowerShell, как показано в разделе New-PSDrive, вы можете удалить его, введя:

Чтобы удалить диск cvkey: Windows PowerShell, также показанный в разделе New-PSDrive, используйте следующую команду:

Удалить диск Windows PowerShell легко, но вы не можете удалить его, пока находитесь на диске. Например:

Командлет Get-PhysicalDiskStorageNodeView получает представление узла физического диска. Объект, возвращаемый этим командлетом, включает свойства физического диска, такие как параметры многопутевого ввода-вывода (MPIO) Microsoft, состояние диска и т. д.

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

Примеры

Пример 1. Получение представления узла для узла Storage

Первая команда получает узел Storage с именем ClusterNode01, а затем сохраняет его в переменной $N.

Вторая команда получает специфичные для узла свойства узла Storage в $N, а затем сохраняет их в переменной $Output.

Третья команда получает указанный приводной объект и сохраняет его в переменной $Pd.

Пример 2. Получение представления узла для диска

Первая команда получает объект диска для PhysicalDisk01, а затем сохраняет его в переменной $Pd.

Вторая команда получает специфичные для узла свойства диска в $Pd.

Пример 3. Получение представления узла для указанного диска и узла

Первая команда получает узел Storage с именем ClusterNode01, а затем сохраняет его в переменной $N.

Вторая команда получает физический диск с именем PhysicalDisk01 и сохраняет его в переменной $Pd.

Третья команда получает представление узла для указанного узла хранилища и физического диска.

Параметры

Тип: CimSession
Позиция:2
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Указывает физический диск как объект CimInstance.

Тип: CimInstance
Позиция:1
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Указывает узел хранения как объект CimInstance.

Тип: CimInstance
Позиция:0
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Результаты

MSFT_StorageNodeToPhysicalDisk

Указывает свойства физического диска, такие как состояние работоспособности, рабочее состояние, состояние MPIO, политику балансировки нагрузки MPIO, идентификаторы пути MPIO, состояние пути MPIO и идентификаторы объекта физического диска и объекта узла хранения.

Делает один или несколько дисков видимыми для операционной системы.

Этот командлет возвращает объекты физических дисков, такие как базовые диски и разделы диска с разделами. Динамические диски могут охватывать несколько частей физического носителя, поэтому командлет Get-Disk не вернет их. Дополнительные сведения см. в разделе Базовые и динамические диски.

Синтаксис

Описание

Командлет Get-Disk получает один или несколько объектов Disk, видимых для операционной системы, или, при необходимости, отфильтрованный список.

Примеры

Пример 1. Получение всех дисков

В этом примере все диски становятся видимыми для операционной системы.

Пример 2: Получить диск по номеру диска

В этом примере используется диск 6.

Пример 3. Получение всех USB-дисков

В этом примере все диски, подключенные через шину USB, получаются путем передачи вывода Get-Disk в командлет Where-Object и фильтрации по значению USB свойства Bustype.

Пример 4. Получение сеансов iSCSI для всех дисков iSCSI

В этом примере все диски, подключенные через шину iSCSI, получаются путем передачи выходных данных Get-Disk в командлет Where-Object и фильтрации по значению iSCSI свойства Bustype. Затем он передает объекты Disk в конвейер командлету Get-IscsiSession, который получает связанные сеансы iSCSI, а затем направляет выходные данные в командлет Format-Table для упрощенного отображения.

Параметры

Запускает командлет как фоновое задание. Используйте этот параметр для запуска команд, выполнение которых занимает много времени.

Тип: SwitchParameter
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Запускает командлет в удаленном сеансе или на удаленном компьютере. Введите имя компьютера или объект сеанса, например выходные данные командлета New-CimSession или Get-CimSession. По умолчанию используется текущий сеанс на локальном компьютере.

Тип: CimSession [ ]
Псевдонимы:Сессия
Позиция:Имя
Значение по умолчанию:Нет
Принимать ввод конвейера:False
Допускать подстановочные знаки:False< /td>

Получает диск с указанным понятным именем. Введите понятное имя или используйте подстановочные знаки для ввода шаблона имени.

Тип: Строка [ ]
Позиция:Имя
Значение по умолчанию:Нет
Принять ввод конвейера:False< /td>
Допускать подстановочные знаки:False

Принимает объект iSCSIConnection в качестве входных данных. Объект CIM подключения iSCSI предоставляется командлетом Get-IscsiConnection.

Тип: CimInstance
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Принимает объект iSCSISession в качестве входных данных. Объект CIM сеанса iSCSI предоставляется командлетом Get-IscsiSession.

Тип: CimInstance
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Указывает номер диска, для которого необходимо получить связанный объект Disk.

Тип: UInt32 [ ]
Псевдонимы:DeviceId
Позиция:0
Значение по умолчанию:Нет
Принимать ввод конвейера:True
Допускать подстановочные знаки:False< /td>

Принимает объект Partition в качестве входных данных. Объект Partition CIM предоставляется командлетом Get-Partition.

Тип: CimInstance
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Содержит действительную информацию о пути.

Тип: Строка [ ]
Позиция:Имя
Значение по умолчанию:Нет
Принять ввод конвейера:True< /td>
Допускать подстановочные знаки:False

Указывает массив серийных номеров, связанных с дисками, которые получает этот командлет.

Тип: Строка [ ]
Позиция:Имя
Значение по умолчанию:Нет
Принять ввод конвейера:False< /td>
Допускать подстановочные знаки:False

Указывает объект задания хранилища, связанный с дисками, которые получает этот командлет. Чтобы получить задание хранилища, используйте командлет Get-StorageJob.

Тип: CimInstance
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Тип: CimInstance
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Указывает подсистему хранения, из которой этот командлет получает диски. Чтобы получить объект StorageSubsystem, используйте командлет Get-StorageSubSystem.

Тип: CimInstance
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Указывает максимальное количество одновременных операций, которое может быть установлено для запуска командлета. Если этот параметр опущен или введено значение 0, Windows PowerShell® вычисляет оптимальный предел регулирования для командлета на основе количества командлетов CIM, запущенных на компьютере. Предел регулирования применяется только к текущему командлету, а не к сеансу или компьютеру.

Тип: Int32
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Получает только диски с указанными идентификаторами. Введите один или несколько идентификаторов (через запятую).

Тип: String [ ]
Псевдонимы:Идентификатор
Позиция:Имя
Значение по умолчанию:Нет
Принимать ввод конвейера:False
Допускать подстановочные знаки:False< /td>

Принимает объект VirtualDisk в качестве входных данных. Объект Virtual Disk CIM предоставляется командлетом Get-VirtualDisk.

Тип: CimInstance
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Входные данные

Вы можете направить объект iSCSIConnection в параметр iSCSIConnection.

Вы можете направить объект iSCSISession в параметр iSCSISession.

Вы можете передать объект Partition в параметр Partition.

Вы можете передать объект VirtualDisk параметру VirtualDisk.

Читайте также: