Шпаргалка по однострочникам PowerShell

Sypalo.com

Шпаргалка по однострочникам PowerShell

За 10 лет автоматизирования ежедневных рутинных задач собралось довольно много коротких скриптов для выполнения различных задач с Active Directory, Cisco UCS, NetApp, VMWare vSphere/vCenter и т.д.

А еще вот нашел интересное видео на Channel9 про объединение команд в одну строку.

А вот собственно и моя шпаргалка по однострочникам в PowerShell:

Узнаем версию PowerShell:

Get-Host | Select Version

Узнаем свой публичный IP-адрес:

(Invoke-RestMethod ipinfo.io/json).ip

Узнаем аптайм Windows (параметр -Since покажет дату и время, когда компьютер был включен):

Get-Uptime -Since

Включаем поддержку TLS 1.2

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12

Получаем список отключенных пользователей из Active Directory

Search-ADAccount -UsersOnly -AccountDisabled

Отправляем email:

Send-MailMessage -From 'bob@outlook.com' -To 'sam@outlook.com', 'john@outlook.com' -Subject 'Bob CV' -Body 'Вот мое резюме' -Attachments .\cv.pdf -Priority High -DeliveryNotificationOption OnSuccess, OnFailure -SmtpServer 'smtp-mail.outlook.com' -port 587 -UseSsl

Получаем список всех не Windows серверов, которые не обращались к Active Directory последние 30 дней:

Get-ADComputer -Filter { OperatingSystem -notlike "Windows Server*" } -Properties PasswordLastSet | ? { (((Get-Date) – $_.PasswordLastSet).Days) -gt 30} | Select Name, @{N="Age";E={ (((Get-Date) – $_.PasswordLastSet).Days) }}

Получаем список EC2 инстансов с определенным именем (в примере, содержащим "dev" в имени):

(Get-EC2Instance -Filter @{Name = "tag:Name"; Value = "*dev*"}).Instances | select @{n="Name";e={($_.Tag | ? Key -eq "Name").Value}}, PrivateIpAddress

Получаем список EC2 инстансов без прикрепленных IAM ролей:

(Get-EC2Instance).Instances | ? { !$_.IamInstanceProfile.Arn } | select @{n="Name";e={($_.Tag | ? Key -eq "Name").Value}}, InstanceId, PrivateIpAddress, { $_.IamInstanceProfile.Arn }

Получаем количество и тип EC2 инстансов:

# Получаем список всех EC2 инстансов
$instances = (Get-EC2Instance).Instances

# Выводим список всех инстансов
$instances | group InstanceType | select Name, @{n='Total';e={$_.Count }}, @{n='Running';e={($_.Group | ? { $_.state.Name -eq "running" }).Count }}, @{n='Stopped';e={($_.Group | ? { $_.state.Name -eq "stopped" }).Count }}

# Выводим список всех инстансов отгруппированых по семеству
$instances | group { $_.InstanceType.ToString().Split('.')[0] } | select Name, @{n='Total';e={$_.Count }}, @{n='Running';e={($_.Group | ? { $_.state.Name -eq "running" }).Count }}, @{n='Stopped';e={($_.Group | ? { $_.state.Name -eq "stopped" }).Count }}

# Выводим список всех инстансов отгруппированых по размеру
$instances | group { $_.InstanceType.ToString().Split('.')[1] } | select Name, @{n='Total';e={$_.Count }}, @{n='Running';e={($_.Group | ? { $_.state.Name -eq "running" }).Count }}, @{n='Stopped';e={($_.Group | ? { $_.state.Name -eq "stopped" }).Count }}

Удалить неиспользуемые AMI образы:

( $usedamis = ((Get-EC2Instance).Instances | select ImageId -unique).ImageId
Get-EC2Image -Owner "_your_owner_id_" | ? ImageId -notin $usedamis | Unregister-EC2Image

Получить список неиспользуемых подсетей EC2:

( Get-EC2Subnet | ? SubnetId -notin (Get-EC2Instance).Instances.SubnetId | select AvailabilityZone, VpcId, SubnetId, CidrBlock