Десять команд powershell, которые должен знать каждый администратор windows

Десять команд powershell, которые должен знать каждый администратор windows

View the objects in a directory

To view the content of a directory on a Windows file server, use the Get-ChildItem cmdlet. To show all hidden files, add the -Force parameter. The command below shows all root objects in the Shared folder:

Get-ChildItem -Force \fsShared

If you want to also check all subfolders and their content, add -Recurse parameter:

Get-ChildItem -Force \fsShared -Recurse

To filter the output, add the Filter, Exclude, Include and Path parameters to the Get-ChildItem cmdlet. For advanced object filtering, use the Where-Object cmdlet. The script below searches for all executable files in the IT folder that were modified after April 1, 2018:

Get-ChildItem -Path \fsSharedIT -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt '2018-04-01')}

Copy Folders and Files of the Remote Computer to the Local Computer

To copy folders and files of a remote computer to the local folder, using the Copy-Item cmdlet, create a session with the remote computer and use the parameter in the Copy-Item command.

Let’s consider an example to copy the directory and files from a remote computer named INCORPP-EU-117.

Create a session using the New-Session cmdlet with a remote computer INCORP-EU-117 with credentials ShellGeek\Admin and store the results in the variable.

Use the Copy-Item cmdlet, it uses the remote computer path and local computer path.

It uses the FromSession parameter to specify the session created with a remote computer.

# Create a session with remote computer using New-Session
$Session = New-PSSession -ComputerName "INCORP-EU-117" -Credential "ShellGeek\Admin"

# Use Copy-Item to copy files to a remote computer
Copy-Item "C:\Log\Config-Backup" -Destination "D:\PS\Config" -FromSession $session -Recurse

In the above PowerShell script, the Copy-Item cmdlet copies the entire directory and its files from a remote computer to the local computer.

Начинаем исследование

На первый взгляд синтаксис командной оболочки кажется немного запутанным, но
в действительности все понятно и логично. Названия командлетов
стандартизированы, имена выглядят как «действие-объект». Так, чтобы получить
данные объекта, используем действие «Get-*», установить «Set-*», остановить –
«Stop-*», вывод – «Out-*» и т.д. Список всех доступных команд можно просмотреть,
выполнив «Get-Command». Для получения помощи набираем «Get-Help». К примеру,
просмотрим список процессов, рассортируем их по использованию процессорного
времени в убывающем порядке и выберем 10 самых прожорливых:

Все просто! Попробуем потушить самый жадный до CPU процесс:

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

Обрати внимание, что в списке будут присутствовать и ветки реестра HKCU и
HKLM, к которым можно обратиться как к обычному диску:

Теперь можно перемещаться по выбранной ветке, просматривать, создавать и
удалять объекты. Для PowerShell разработано большое количество
командлетов, и если ты не хочешь повторно изобретать колесо, вполне естественно
посмотреть на результаты работы других администраторов. Сообществом
PowerShell создан репозитарий командлетов
PoshCode Cmdlets, который является неким аналогом Perl CPAN. Здесь можно
найти решения практически на все случаи. Например, нужен снифер на PowerShell?
Нет ничего проще!
Качаем с сайта файл Get-Packet.ps1 и запускаем:

Все параметры описаны внутри файла. Другой командлет
Analyze-Packet позволит получить детальную статистику по пакетам.

По умолчанию выполнение сценариев в PowerShell запрещено, поэтому не
все команды удастся запустить. Просмотреть текущий статус политики выполнения
можно командой:

Существует четыре типа политики:

  • Restricted — возможно выполнение отдельных команд, сценарии запрещены;
  • AllSigned — разрешено выполнение подписанных сценариев, перед запуском
    запрашивается подтверждение;
  • RemoteSigned – похож на предыдущий, не запрашивается выполнение сценариев,
    подписанных надежным издателем, не требуется подпись для локальных сценариев;
  • Unrestricted – можно запускать неподписанные сценарии.

Delete files and folders with PowerShell

To delete objects, use the Remove-Item cmdlet. Please note that it requires your confirmation upon execution if the object is not empty. The example below demonstrates how to delete the IT folder and all the subfolders and files inside it:

Remove-Item -Path '\fssharedit'
Confirm
The item at \pdcsharedit has children and the Recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
 Yes   Yes to All   No   No to All   Suspend   Help
(default is "Y"):

If you have already made sure that every object inside the folder should be deleted, you can use the ?Recurse switch to skip the confirmation step:

Remove-Item -Path '\fssharedit' -Recurse

Delete files and folders older than X days

Sometimes you need to clean up old files from a certain directory. Here’s the way to accomplish that:

$Folder = "C:Backups"

#delete files older than 30 days
Get-ChildItem $Folder -Recurse -Force -ea 0 |
? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-30)} |
ForEach-Object {
   $_ | del -Force
   $_.FullName | Out-File C:logdeletedbackups.txt -Append
}

#delete empty folders and subfolders if any exist
Get-ChildItem $Folder -Recurse -Force -ea 0 |
? {$_.PsIsContainer -eq $True} |
? {$_.getfiles().count -eq 0} |
ForEach-Object {
    $_ | del -Force
    $_.FullName | Out-File C:logdeletedbackups.txt -Append
}

Delete files after checking they exist

Here’s how to check whether a file exists and delete it if it does:

$FileName = 'C:datalog.txt'
If (Test-Path $FileName){
   Remove-Item $FileName
}

Delete files from multiple computers in one script

To delete files from remote PCs, you must have the appropriate security permissions to access them. Be sure to use UNC paths so the script will correctly resolve the file locations.

$filelist = @(" c$Temp", "c$Backups") #variable to delete files and folder
$computerlist = Get-Content  C:datapc.txt #get list of remote pc's
    foreach ($computer in $computerlist){
        foreach ($file in $filelist){
            $filepath= Join-Path "\$computer" "$filelist" #generate unc paths to files or folders
            if (Test-Path $filepath)
            {
            Remove-Item $filepath -force -recurse -ErrorAction Continue}}}

Чтение текстового файла в массив

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

PS> Get-Content -Path C:\boot.ini

timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
 /noexecute=AlwaysOff /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional
with Data Execution Prevention" /noexecute=optin /fastdetect

Командлет  сразу рассматривает данные, считанные из файла, как массив с одним элементом на строку содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:

PS> (Get-Content -Path C:\boot.ini).Length
6

Эта команда наиболее полезна для непосредственного ввода в Windows PowerShell информационных списков. Например, можно хранить в файле  список имен компьютеров или IP-адресов по одному имени на каждую строку файла. Вы можете использовать командлет , чтобы извлечь содержимое файла и поместить его в переменную :

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

Теперь переменная  представляет собой массив, содержащий в каждом элементе имя компьютера.

PowerShell Copy-Item

If you’re in a high-security environment or need to transfer files from an internal network to a DMZ that might have various port restrictions, how can you ensure that your scripts are able to copy files to nodes all the time? One way to do so is to use PowerShell v5’s Copy-Item cmdlet with the new –ToSession parameter.

This parameter was introduced with Windows Management Framework (WMF) v5 with the Copy-Item cmdlet. It provides a way to transfer files over the same link that you might use today to execute commands remotely on computers with cmdlets like Invoke-Command.

This process has a few different advantages, but included in the biggest benefits are the TCP ports used: 5985 (HTTP) and 5986 (HTTPS). These standard ports are typically open to manage remote nodes, sometimes even to a DMZ environment. By using Copy-Item –ToSession, an administrator can ensure files will always be copied to a remote computer regardless of whether or not SMB is blocked.

When you’re using PowerShell Copy-Item via the traditional SMB method, you need to specify the Path and Destination parameters. If you’d like to copy a file called file1.txt inside of C:\Folder to a remote computer SERVER1 on its C:\, you could do this:

Copy-Item –Path C:\Folder1\file1.txt –Destination '\\SERVER1\c$'

Notice that you’re using the UNC path of \\SERVER1\c$ here. This will be important in a minute.

Протокол BITS

Служба BITS или фоновая интеллектуальная передача – это служба Windows, используемая для передачи файлов между системами. Используя протокол BITS, можно передавать как загружаемые, так и выгружаемые файлы. Используя этот протокол, компьютеры загружают файлы с серверов при выполнении автоматических обновлений Windows (включая загрузку обновлений с сервера WSUS), при получении программ из точек распространения SCCM и т.д.

Преимущества протокола BITS:

  • BITS – это интеллектуальный протокол, который во время работы может регулировать используемую полосу пропускания канала связи, чтобы не влиять на другие приложения и сетевые службы. BITS может использовать только нераспределенную полосу пропускания канала и динамически изменять скорость передачи данных во время работы (если другие приложения увеличивают нагрузку на сеть, BITS может снизить скорость передачи данных в сети);
  • Загрузка файла может происходить в фоновом режиме, незаметно для пользователя;
  • Процесс BITS в режиме возобновления будет продолжен автоматически, даже если канал связи между компьютером и клиентом прерван или после перезапуска компьютера;
  • В любой момент вы можете приостановить или возобновить загрузку через BITS без потери данных; Возможность перезапуска процедуры копирования файлов по сети также доступна в утилите robocopy.exe, которая позволяет возобновить загрузку файла в случае потери соединения.
  • BITS позволяет расставить приоритеты для задач загрузки;
  • Файлы передаются между компьютерами через порты 80 (HTTP) или 443 (HTTPS), поэтому нет необходимости открывать дополнительные порты на брандмауэрах. Например, порт 445, который используется для копирования при использовании протокола SMB (не забывайте, что в предыдущих версиях протокола SMB 1.0 есть много уязвимостей);
  • На стороне получателя и сервера распределенный сервер IIS не требуется.

Следовательно, BITS – оптимальный протокол для передачи больших файлов по медленным и нестабильным сетям (спутниковый канал, соединение GPRS и т.д.).

Синхронная передача файлов между компьютерами с помощью BITS

Командлет Start-BitsTransfer позволяет загружать файлы через протоколы HTTP (например, командлет Invoke-WebRequest) и из общих сетевых ресурсов (через SMB). Чтобы загрузить файл с указанного URL-адреса по протоколу BITS и сохранить его в локальном каталоге C: \ Temp, используйте команду:

Сообщение Это передача файла с использованием фоновой интеллектуальной службы передачи (BITS) указывает, что загрузка указанного файла началась с использованием протокола BITS.

В этом примере командлет загружает файл синхронно. Загрузка файла аналогична обычной процедуре копирования с использованием проводника или командлета PowerShell Copy-Item. В этом случае на экране появляется индикатор выполнения, показывающий статус загрузки. Когда ваш компьютер перезагрузится, загрузка не возобновится (вам нужно снова загрузить весь файл).

Примеры использования Get-Alias

Пример 1: Вывести список всех псевдонимов в текущем сеансе

Get-Alias

    CommandType     Name
    -----------     ----
    Alias           % -> ForEach-Object
    Alias           ? -> Where-Object
    Alias           ac -> Add-Content
    Alias           asnp -> Add-PSSnapin
    Alias           cat -> Get-Content
    Alias           cd -> Set-Location
    Alias           chdir -> Set-Location
    Alias           clc -> Clear-Content
    Alias           clear -> Clear-Host
    Alias           clhy -> Clear-History
    ...

Эта команда получает все псевдонимы в текущем сеансе.

В выходных данных показан формат «ПСЕВДОНИМ -> ЗНАЧЕНИЕ», который был введён в Windows PowerShell 3.0. Этот формат используется только для псевдонимов, не содержащих дефисов, поскольку псевдонимы с дефисами обычно являются предпочтительными именами для командлетов и функций, а не псевдонимами.

Пример 2: Найти псевдонимы по имени

Get-Alias -Name gp*, sp* -Exclude *ps

Эта команда получает все псевдонимы, начинающиеся с gp или sp, за исключением псевдонимов, заканчивающихся на ps.

Пример 3: Узнать псевдонимы для командлета

Get-Alias -Definition Get-ChildItem

Эта команда получает псевдонимы для командлета Get-ChildItem.

По умолчанию командлет Get-Alias получает имя элемента, если известен псевдоним. Параметр -Definition получает псевдоним, если вы знаете имя элемента.

Пример 4: Получить псевдонимы по свойству

Get-Alias | Where-Object {$_.Options -Match "ReadOnly"}

Эта команда получает все псевдонимы, в которых значение свойства Options равно ReadOnly. Эта команда обеспечивает быстрый способ поиска псевдонимов, встроенных в PowerShell, поскольку у них у всех параметр ReadOnly.

Options — это лишь одно свойство объектов AliasInfo, которые получает Get-Alias. Чтобы найти все свойства и методы объектов AliasInfo, введите

Get-Alias | Get-Member

Пример 5. Поиск псевдонимов по имени и фильтрация по начальной букве

Get-Alias -Definition "*-PSSession" -Exclude e* -Scope Global

Этот пример получает псевдонимы для команд, имена которых заканчиваются на «-PSSession», за исключением тех, которые начинаются на «e».

Команда использует параметр -Scope для применения команды в глобальной области. Это полезно в сценариях, когда вы хотите получить псевдонимы в определённой сессии.

Различные типы модулей PowerShell

Существует 4 различных типа модулей PowerShell:

  • Скриптовые модули — Самый распространенный тип модуля, не требующий знания C#, в основном любые файлы PSM1, содержащие в основном функции и код, используемые разработчиками скриптов и администраторами.
  • Бинарные модули — Содержат скомпилированный код на основе сборки .NET Framework (DLL), используемый разработчиками командлетов для создания модулей, содержащих командлеты, поставщиков и т. д.
  • Модули манифеста — Скриптовые модули, содержащие манифест, например, с информацией об авторе и т. д.
  • Динамические модули — Специальный тип модуля, который никогда не записывается на диск и существует только в памяти. Элементы динамического модуля (функции/переменные) сразу же доступны в сеансе PowerShell, пока сеанс не будет закрыт.

Работаем с Active Directory

Используя командлеты, можно выполнять все операции с Active Directory —
создавать, удалять, изменять, просматривать свойства объектов, перемещать,
переименовывать и восстанавливать объекты, управлять группами, ролями FSMO,
доменами и лесами, настраивать политики и многое другое. Обращение к AD
происходит через ADSI путем
опроса пространства имен «System.DirectoryServices» .NET Framework. Но при
использовании ADSI даже простые команды выглядят довольно пугающе для новичков
(я уже не говорю о сложных конструкциях). Для примера зададим путь к контейнеру
и просмотрим его свойства:

Чтобы создать новый объект, набираем:

В состав Win2k8 входит утилита ADSI Edit, которая упрощает поиск параметров
для написания сценариев, а в Win2k8R2 и Win7 (и только в них) доступен набор
командлетов AD PowerShell (Active Directory Module for Windows PowerShell), с
помощью которого можно:

  • создавать, удалять, изменять и читать объекты пользователей, групп,
    компьютеров, управляемых аккаунтов служб и организационных подразделений;
  • управлять свойствами аккаунтов: дата истечения, пароль и т.д.;
  • управлять членством в группах, получать список групп, в которые включен
    аккаунт;
  • управлять политикой паролей домена;
  • перемещать контроллеры домена между сайтами и получать информацию о КД;
  • управлять политикой репликации пароля контроллера домена только для
    чтения;
  • управлять доменами и лесами, устанавливать функциональный уровень домена и
    леса.

Чтобы установить AD PowerShell в Win7, надо инсталлировать RSAT (Microsoft
Remote Server Administration Tools). После чего AD PowerShell можно
загрузить прямо из меню «Программы и компоненты» (Turn Windows Features on or
off — Remote Server Administration Tools — Role Administration Tools — AD DS and
LDS Tools — Active Directory PowerShell snap-in). На сервере Win2k8R2 нужный
компонент ставится еще проще:

Для загрузки модуля AD PowerShell набираем:

К примеру, получим все КД текущего домена:

Также появились командлеты для работы с AD от сторонних разработчиков. Очень
популярны свободно распространяемыеAD
PowerShell cmdlets (их еще называют QAD cmdlets), разработанные Quest
Software. В этом наборе имена командлетов составлены из стандартной пары
«действие-объект». На первой позиции стоят все те же английские глаголы Get-,
Set-, New-, Move-, Remove-, Rename- и так далее. На второй — описание объекта с
префиксом QAD (-QADUser, -QADComputer, -QADGroup, -QADObject). Получить список
доступных QAD командлетов очень просто:

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

Для начала получим список пользователей и затем компьютеров:

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

Теперь просмотрим список пользователей, которые не регистрировались 2 месяца
и сохраним вывод в HTML-файл:

Чтобы в отчет не попали отключенные учетные записи, в команде
проконтролировали значение AccountIsDisabled. Знак «?» является алиасом
«Where-Object»; специальная переменная «$_», которая часто используется в
скриптах PowerShell, указывает на текущий объект.

Стоит отметить, атрибут LastLogon не реплицируется между контроллерами
домена, поэтому если в сети их несколько, то это значение следует получить с
каждого КД. Получим список КД и затем опросим каждый на предмет LastLogon:

А теперь выберем всех пользователей из отдела Sales, проживающих в Москве, и
укажем для них новый номер телефона:

Создадим новую доменную учетную запись:

Чтобы отключить, включить или разблокировать учетную запись, следует
использовать командлеты Disable-QADUser, Enable-QADUser и Unlock-QADUser,
соответственно. Также просто создавать новые объекты:

Теперь переместим в созданный контейнер ряд учетных записей:

Управление группами выглядит аналогично:

Экспериментируя с PowerShell, можно легко ошибиться, поэтому при
изменении объектов AD лучше запустить выполнение с ключом «-whatif» (что если).
В этом случае вместо действительного изменения параметров скрипт выведет в
консоль все, что он должен сделать.

Используем BITS для асинхронного копирования больших файлов по сети

Процесс загрузки файла через BITS также можно запустить в асинхронном режиме, добавив параметр –asynchronous к предыдущей команде. В этом режиме, если что-то произойдет во время процесса загрузки файла (перезагрузка сервера, перезагрузка клиента, прерывание канала связи и т.д.), Активность будет продолжена автоматически после восстановления источника и загрузка файла продолжится с того момента, когда было установлено соединение потерянный.

По умолчанию Start-BitsTransfer работает с приоритетом переднего плана (максимально возможным). Предполагается, что загрузка файла, инициированная в этом режиме, будет конкурировать с другими процессами за пропускную способность. Чтобы этого избежать, вам нужно явно указать любой другой приоритет в качестве аргумента команды, например -Низкий приоритет:

Асинхронный процесс BITS выполняется в фоновом режиме и не отображает ход выполнения команды загрузки файла. Статус процесса BITS можно получить из консоли PowerShell с помощью команды Get-BitsTransfer:

Команда возвращает статус передачи (в этом случае видно, что передача завершена – Transferred), информацию о количестве переданных байтов, общем размере файла, времени создания и завершения процесса BITS.

вы можете просмотреть статус всех процессов BITS, запущенных на вашем компьютере, в табличной форме:

При использовании асинхронного режима передачи временный файл с расширением .tmp создается в целевом каталоге (по умолчанию скрыт в проводнике). Чтобы преобразовать его в исходный тип файла (который хранится на исходном сервере), вам необходимо выполнить команду Complete-BitsTransfer:

После этого процесс загрузки BITS считается завершенным и исчезает из списка процессов.

вы можете загрузить локальный файл в общую сетевую папку на удаленном сервере. Для этого воспользуйтесь следующей командой (для удобства можно указать название задания копирования):

Чтобы временно приостановить процесс BITS, запустите:

Чтобы продолжить работу, используйте командлет Resume-BitsTransfer:

вы можете добавить дополнительные файлы в процесс BITS с помощью командлета Add-BitsFile:

Чтобы удалить все процессы загрузки BITS на вашем компьютере (в том числе инициированные другими пользователями), выполните команду:

Задания BITS, инициированные системой, не могут быть отменены (ошибка 0x80070005 Процесс не может быть отменен). Чтобы отменить это действие, вам нужно запустить команду Remove-BitsTransfer из SYSTEM.

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

Чтобы упростить отслеживание хода выполнения задания BITS, вы можете использовать простой скрипт, который отслеживает задание и каждые несколько секунд отображает процент загрузки на экране. После завершения загрузки файла скрипт автоматически преобразует файл TMP в исходный формат:

PowerShell copy item exclude folder

Now, let us see an example of PowerShell copy item exclude folder.

Here, PowerShell copy-item will exclude folders while copying files.

Here it will exclude the Subfolder from the Source while copying.

If you want to exclude multiple folders, like suppose you want to exclude folders name as Folder1, Folder2, then you can write the PowerShell copy-item script like below:

As you can see below the Copy-Item command did not copy the Folder1 and Folder2 to the destination folder.


PowerShell copy item exclude folder

This is how we can exclude folders while copying files using PowerShell copy-item.

Что такое модуль PowerShell?

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

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

Copy Folder Content Recursively to Destination

Using the PowerShell Copy-Item cmdlet, it copies the folder content recursively from the source location to the destination location.

Let’s consider an example to copy the content of the D:\PS\Config directory to the destination location D:\PS\Config-Backup

Copy-Item uses the parameter to specify the source location and parameter for another existing directory path.

It copies all the files from the source directory recursively to the destination folder.

Copy-Item -Path D:\PS\Config\* -Destination D:\PS\Config-Backup -Recurse    

In the above PowerShell script, Copy-Item uses parameter to copy subdirectories and files from the source location to another location.

Note here that, it doesn’t copy the source directory, in our example Config.

Параметры удаленного взаимодействия PowerShell по умолчанию

Удаленное взаимодействие PowerShell (и WinRM) прослушивают следующие порты:

  • HTTP — 5985;
  • HTTPS — 5986.

По умолчанию функция удаленного взаимодействия PowerShell допускает подключения только от участников группы «Администраторы».
Сеансы запускаются в контексте пользователя, поэтому все элементы управления доступом операционной системы, примененные к отдельным пользователям и группам, продолжают применяться к ним при подключении через удаленное взаимодействие PowerShell.

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

Предупреждение

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

Сетевые ресурсы

Блог команды разработчиков продукта: http://blogs.msdn.com/PowerShell/ .

Утилиты, редакторы и дополнения: http://www.powershell.com/ .

Блог Дмитрия Сотникова из компании Quest: http://dmitrysotnikov.wordpress.com/ .

PowerGadgets — пример неограниченных возможностей расширения PowerShell:

1. Написание скрипта

Скрипт PowerShell (не важно какой версии) — это текстовый файл с расширением *.ps1. Вот пример простого Power Shell срипта (файл systemInfo.ps1
):

Вот пример простого Power Shell срипта (файл systemInfo.ps1
):

# Retrieve WMI object for the operating system

Get-WmiObject Win32_OperatingSystem

Этот файл можно создавать и редактировать, например, в FAR Manager.

Обратите внимание
, что FAR Manager хоть и может работать в консоли Power Shell, но выполняет из-под себя скрипты в окружении обычной Windows-консоли
cmd. То есть, FAR Manager можно использовать только для создания и редактирования PowerShell скриптов, но не для запуска

Но прежде чем разочаровываться, прочитайте пункт 3.

2. Запуск срипта

Скрипт нужно выполнять из консоли Power Shell, а не из обычной консоли Windows. В консоли Power Shell необходимо перейти в каталог, где лежит скрипт (командами
cd
), и затем запустить сам скрипт, обязательно прописав перед ним символы
«.\»
. Например, имеем путь к файлу скрипта
d:\work\systemInfo.ps1
. Тогда команды запуска будут выглядеть так:

d:

cd \

cd work

.\systemInfo.ps1

или так (просто указывается полный путь к скрипту):

d:\work\systemInfo.ps1

Скорее всего, при запуске скрипта появится следующая ошибка:

Не удается загрузить файл D:\work\systemInfo.ps1, так как выполнение скриптов запрещено для данной системы. Введите «get-help about_signing» для получения дополнительных сведений.

строка:1 знак: 18

CategoryInfo: NotSpecified: (:) , PSSecurityException

FullyQualifiedErrorId: RuntimeException

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

Чтобы резрешить выполнение PowerShell скриптов, нужно создать *.bat файл, например enableScript.bat
со следующим содержимым:

powershell -Command Set-ExecutionPolicy RemoteSigned

Этот *.bat файл можно выполнить в любой консоли: хоть в PowerShell, хоть в обычной
cmd
. После выполнения этого файла, PowerShell-скрипты станут запускаться в консоли PowerShell.

3. Запуск PowerShell-скрипта из обычной Windows-консоли cmd

Скрипт PowerShell можно выполнить и из обычной консоли Windows. Для этого можно воспользоваться командой:

Powershell -File ./systemInfo.ps1

Таким образом можно выполнять скрипты прямо из FAR Manager, и они будут работать.

Но тут есть небольшая тонкость. Параметр
-File
срабатывает только на локальных путях, даже если путь указан относительный
«./»
. То есть, если
*.ps1
— файл лежит на локальном диске
C:
или
D:
, то такой вызов будет работать. Но если попробовать выполнить скрипт, расположенный на доменном ресурсе, то скрипт не будет найден. Возможно, это исправят в следующих версиях PowerShell.

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

Примечание!
Данный справочник составлен на основе командлетов версии PowerShell 5.0 в операционной системе Windows Server 2016 .

Получение списка сетевых дисков и их удаление

Мы можем получить список сетевых дисков используя обе команды модуля:

Отличия, которые видны на первый взгляд в том, что во втором случае мы возвращаем список дисков подключение к которым не восстановилось. Кроме этого ‘Get-SmbMapping’ хранит больше информации о дисках, если вывести их все:

Мы можем вывести учетную запись, под которой подключена сетевая папка, следующим образом:

Команды удаления отличаются только наличием параметра ‘UpdateProfile’. Если он присутствует в команде ‘Remove-SMBMapping’, то диск не будет восстанавливать соединение после перезагрузки компьютера. В случае с Remove-PSDrive это предусмотрено автоматически:

Force удаляет подключение без подтверждения.

Где найти сторонние модули и скрипты PowerShell?

Помимо предустановленных модулей самой Windows PowerShell, существует огромное количество сторонних модулей. Для поиска конкретных модулей я рекомендую PowerShellGallery. Он функционирует как центральный репозиторий для обмена и получения кода PoSh, такого как модули, скрипты и многое другое. В основном они распространяются через PSRepository, которые обычно представляют собой веб-серверы, на которых можно публиковать файлы, тогда как эти PSRepos можно размещать у себя или использовать с помощью онлайн-опций, таких как PowerShellGallery. Get-PSRepository  откроет список доступных PSRepositories, помеченных информацией о том, публикует ли источник код, одобренный Microsoft или нет ( trusted/untrusted ). Чтобы изменить состояние доверия PowerShellGallery, например, используйте:

Get-PSRepository -Name PSGallery | Set-PSRepository -InstallationPolicy Trusted

На этом у меня все. Мы с вами разобрали полный цикл управления модулями PowerShell. С вами был Иван Сёмин. автор и создатель IT портала Pyatilistnik.org.

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: