Администрирование — Клёвый код https://coolcode.ru Скриптописание и кодинг Wed, 22 Aug 2018 12:10:14 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.8.12 https://coolcode.ru/wp-content/uploads/2015/10/YO1-150x150.png Администрирование — Клёвый код https://coolcode.ru 32 32 PowerShell. Get-ADGroupMember https://coolcode.ru/powershell-get-adgroupmember/ https://coolcode.ru/powershell-get-adgroupmember/#respond Wed, 12 Oct 2016 06:19:39 +0000 http://coolcode.ru/?p=10095

ОПИСАНИЕ

Получает элементы группы Active Directory.

СИНТАКСИС

Get-ADGroupMember [-Identity] <ADGroup> [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <string>] [-Recursive <switch>] [-Server <string>] [<CommonParameters>]

ОПИСАНИЕ

Командлет Get-ADGroupMember получает элементы группы Active Directory. Элементами могут быть пользователи, группы и компьютеры.

Параметр Identity определяет группу Active Directory, к которой производится обращение. Группу можно идентифицировать по ее различающемуся имени (DN), значению GUID, идентификатору безопасности (SID) или имени учетной записи SAM. Группу можно также задать, передав объект группы по конвейеру. Например, можно использовать командлет Get-ADGroup, чтобы извлечь объект группы, и затем передать этот объект по конвейеру командлету Get-ADGroupMember.

Если задан параметр Recursive, командлет получает все элементы из иерархии группы, которые не содержат дочерних объектов. Например, если группа InnaOzhoginaReports содержит пользователя SvetlanaOmelchenko и группу VadimKorepinReports, а группа VadimKorepinReports содержит пользователя AlexeyOrekhov, то данный командлет возвратит значения SvetlanaOmelchenko и AlexeyOrekhov.

Для сред AD LDS необходимо задать параметр Partition, за исключением двух следующих случаев.
— Командлет запускается с диска поставщика Active Directory.
— Для среды AD LDS определен контекст или раздел именования по умолчанию. Чтобы задать контекст именования по умолчанию для среды AD LDS, задайте значение свойства msDS-defaultNamingContext объекта агента служб каталогов (DSA) Active Directory (nTDSDSA) для экземпляра AD LDS.

 

ПАРАМЕТРЫ

-AuthType <ADAuthType>

Задает используемый метод проверки подлинности. Возможные значения параметра:
Negotiate или 0
Basic или 1

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

Для метода проверки подлинности Basic требуется SSL-соединение.

В следующем примере показано, как присвоить этому параметру значение Basic.

-AuthType Basic

Возможные значения параметра:

Negotiate

Basic

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию Microsoft.ActiveDirectory.Management.AuthType.Negotiate
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Credential <PSCredential>

Задает параметры учетной записи пользователя для выполнения задачи. Учетными данными по умолчанию являются учетные данные текущего пользователя, вошедшего в систему, если только командлет не выполняется с диска поставщика Active Directory PowerShell. Если командлет выполняется с такого диска поставщика, в качестве значения по умолчанию используется учетная запись, связанная с диском.

Чтобы задать этот параметр, можно ввести имя пользователя, например «User1» или «Domain01\User01», либо указать объект PSCredential. Если для этого параметра задать имя пользователя, командлет запросит пароль.

Кроме того, объект PSCredential можно создать с помощью скрипта или командлета Get-Credential. Затем параметру Credential можно присвоить значение объекта PSCredential. В следующем примере показано как создать учетные данные.
$AdminCredentials = Get-Credential «Domain01\User01»

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

-Credential $AdminCredentials

Если для используемых учетных данных не установлены полномочия на уровне каталога для выполнения задачи, Active Directory PowerShell вернет прерывающую ошибку.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Identity <ADGroup>

Задает объект группы Active Directory путем указания одного из следующих значений. Идентификатор в скобках представляет собой отображаемое имя LDAP атрибута.

Различающееся имя
Пример: CN=saradavisreports,OU=europe,CN=users,DC=corp,DC=contoso,DC=com
GUID (objectGUID)
Пример: 599c3d2e-f72d-4d20-8a88-030d99495f20
Идентификатор безопасности (objectSid)
Пример: S-1-5-21-3165297888-301567370-576410423-1103
Имя учетной записи SAM (sAMAccountName)
Пример: saradavisreports

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

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

В данном примере показано, как присвоить этому параметру различающееся имя.

-Identity "CN=innaozhoginareports,OU=europe,CN=users,DC=corp,DC=contoso,DC=com"

В данном примере показано, как присвоить этому параметру экземпляр объекта группы с именем «ADGroupInstance».

-Identity $ADGroupInstance

Необходимость параметров Не обязательный параметр
Позиция? 1
Значение по умолчанию
Принимать входные данные конвейера true (ByValue)
Принимать подстановочные знаки false

 

-Partition <string>

Задает различающееся имя раздела Active Directory. Различающееся имя должно являться одним из контекстов именования текущего сервера каталогов. Командлет ищет в этом разделе объект, заданный параметром Identity.
В следующих двух примерах показано, как задать значение этого параметра.

-Partition "CN=Configuration,DC=EUROPE,DC=TEST,DC=CONTOSO,DC=COM"

-Partition "CN=Schema,CN=Configuration,DC=EUROPE,DC=TEST,DC=CONTOSO,DC=COM"

Во многих случаях, если значение параметра Partition не указано, для него будет использоваться Значение по умолчанию,. Правила определения значения по умолчанию представлены ниже. Обратите внимание, что правила, указанные первыми, анализируются также первыми, и после определения значения по умолчанию никакие другие правила не рассматриваются.

В средах доменных служб Active Directory Значение по умолчанию, параметра Partition будет установлено в следующих случаях. — Если в качестве значения параметра Identity установлено различающееся имя, для формирования значения по умолчанию параметра Partition автоматически используется это различающееся имя.
— При запуске командлетов с диска поставщика Active Directory для формирования значения по умолчанию параметра Partition автоматически используется текущий путь на диске.
— Если ни один из представленных выше вариантов не применим, в качестве значения по умолчанию параметра Partition будет использоваться раздел по умолчанию или контекст именования целевого домена.

В средах AD LDS Значение по умолчанию, параметра Partition будет установлено в следующих случаях.
— Если в качестве значения параметра Identity установлено различающееся имя, для формирования значения по умолчанию параметра Partition автоматически используется это различающееся имя.
— При запуске командлетов с диска поставщика Active Directory для формирования значения по умолчанию параметра Partition автоматически используется текущий путь на диске.
— Если для целевого экземпляра AD LDS существует контекст именования по умолчанию, в качестве значения по умолчанию параметра Partition будет использоваться этот контекст именования. Чтобы задать контекст именования по умолчанию для среды AD LDS, задайте значение свойства msDS-defaultNamingContext объекта агента служб каталогов (DSA) Active Directory (nTDSDSA) для экземпляра AD LDS.
— Если ни один из представленных выше вариантов не применим, для параметра Partition не будет использоваться Значение по умолчанию,.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Recursive <switch>

Задает, что командлет получает все элементы из иерархии группы, которые не содержат дочерних объектов. В следующем примере показана иерархия для группы InnaOzhoginaReports.
+InnaOzhoginaReports [group]
-SvetlanaOmelchenko [user]
-SergeyKlimovLaptop [computer]
+VadimKorepinReports [group]
-AlexeyOrekhov [user]
-AntonKirilov [user]
+VadimKorepinComputers [group]
-AlexeyComputer [computer]

Если задать группу InnaOzhoginaReports и указать параметр Recursive, возвращаются следующие элементы и подэлементы.
SvetlanaOmelchenko
SergeyKlimovLaptop
AlexeyOrekhov
AntonKirilov
AlexeyComputer

Если заданная группа не содержит элементов, ничего не возвращается.

В следующем примере показано, как задать этот параметр.

-Recursive

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Server <string>

Задает используемый для подключения экземпляр доменных служб Active Directory, указывая одно из следующих значений соответствующего доменного имени или сервера каталогов. Служба может относиться к следующим категориям: службы Active Directory облегченного доступа к каталогам, доменные службы Active Directory или снимки Active Directory.
Значения доменного имени:
Полное доменное имя
Примеры corp.contoso.com
NetBIOS-имя
Пример: CORP

Значения сервера каталогов:
Полное имя сервера каталогов
Пример: corp-DC12.corp.contoso.com
NetBIOS-имя
Пример: corp-DC12
Полное имя сервера каталогов и порт
Пример: corp-DC12.corp.contoso.com:3268

Значение параметра Server по умолчанию определяется одним из следующих методов в указанном ниже порядке.
— Используя значение Server из объектов, переданных по конвейеру.
— Используя информацию о сервере, связанную с диском поставщика Active Directory PowerShell, если запуск выполнен с этого диска.
— Используя домен компьютера, на котором выполняется Powershell.

В следующем примере показано, как указать в качестве значения параметра полное доменное имя.

-Server "corp.contoso.com"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

<CommonParameters>

Этот командлет поддерживает общие параметры: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable и OutVariable. Дополнительные сведения см. в статье about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).

 

ВХОДНЫЕ ДАННЫЕ

Нет или Microsoft.ActiveDirectory.Management.ADGroup

Объект группы занесен в параметр Identity

ВЫХОДНЫЕ ДАННЫЕ

Microsoft.ActiveDirectory.Management.ADPrincipal

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

ПРИМЕЧАНИЯ

Этот командлет не работает со снимками Active Directory.

 

ПРИМЕР 1

get-adgroupmember
cmdlet Get-ADGroupMember at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
Identity: Administrators

distinguishedName : CN=Domain Admins,CN=Users,DC=Fabrikam,DC=com
name : Domain Admins
objectClass : group
objectGUID : 5ccc6037-c2c9-42be-8e92-c8f98afd0011
SamAccountName : Domain Admins
SID : S-1-5-21-41432690-3719764436-1984117282-512

distinguishedName : CN=Enterprise Admins,CN=Users,DC=Fabrikam,DC=com
name : Enterprise Admins
objectClass : group
objectGUID : 0215b0a5-aea1-40da-b598-720efe930ddf
SamAccountName : Enterprise Admins
SID : S-1-5-21-41432690-3719764436-1984117282-519

distinguishedName : CN=LabAdmin,CN=Users,DC=Fabrikam,DC=com
name : LabAdmin
objectClass : user
objectGUID : ab7c269d-aec5-4fcc-aebe-6cd1a2e6cd53
SamAccountName : LabAdmin
SID : S-1-5-21-41432690-3719764436-1984117282-1000

distinguishedName : CN=Administrator,CN=Users,DC=Fabrikam,DC=com
name : Administrator
objectClass : user
objectGUID : 994f46e6-c62c-483f-a6cf-124197b6a959
SamAccountName : Administrator
SID : S-1-5-21-41432690-3719764436-1984117282-500

Описание
————

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

 

ПРИМЕР 2

get-adgroup -server localhost:60000 -filter {GroupScope -eq "DomainLocal"} -SearchBase "DC=AppNC" | get-adgroupmember -partition "DC=AppNC"

distinguishedName : CN=SanjayPatel,OU=AccountDeptOU,DC=AppNC
name : SanjayPatel
objectClass : user
objectGUID : d671de28-6e40-42a7-b32c-63d336de296d
SamAccountName :
SID : S-1-510474493-936115905-2231798853-1260534229-4171027843-767619944

Описание
————

Получение членов групп всех локальных групп домена экземпляра AD LDS.

 

ПРИМЕР 3

get-adgroupmember -Identity administrators

distinguishedName : CN=Domain Admins,CN=Users,DC=Fabrikam,DC=com
name : Domain Admins
objectClass : group
objectGUID : 5ccc6037-c2c9-42be-8e92-c8f98afd0011
SamAccountName : Domain Admins
SID : S-1-5-21-41432690-3719764436-1984117282-512

distinguishedName : CN=Enterprise Admins,CN=Users,DC=Fabrikam,DC=com
name : Enterprise Admins
objectClass : group
objectGUID : 0215b0a5-aea1-40da-b598-720efe930ddf
SamAccountName : Enterprise Admins
SID : S-1-5-21-41432690-3719764436-1984117282-519

distinguishedName : CN=LabAdmin,CN=Users,DC=Fabrikam,DC=com
name : LabAdmin
objectClass : user
objectGUID : ab7c269d-aec5-4fcc-aebe-6cd1a2e6cd53
SamAccountName : LabAdmin
SID : S-1-5-21-41432690-3719764436-1984117282-1000

distinguishedName : CN=Administrator,CN=Users,DC=Fabrikam,DC=com
name : Administrator
objectClass : user
objectGUID : 994f46e6-c62c-483f-a6cf-124197b6a959
SamAccountName : Administrator
SID : S-1-5-21-41432690-3719764436-1984117282-500

Описание
————

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

 

ПРИМЕР 4

get-adgroupmember "Enterprise Admins" -recursive

distinguishedName : CN=Administrator,CN=Users,DC=Fabrikam,DC=com
name : Administrator
objectClass : user
objectGUID : 994f46e6-c62c-483f-a6cf-124197b6a959
SamAccountName : Administrator
SID : S-1-5-21-41432690-3719764436-1984117282-500

distinguishedName : CN=Sagiv Hadaya,CN=Users,DC=Fabrikam,DC=com
name : Sagiv Hadaya
objectClass : user
objectGUID : 64706230-f179-4fe4-b8c9-f0d334e66ab1
SamAccountName : SHadaya
SID : S-1-5-21-41432690-3719764436-1984117282-1158

Описание
————

Получение всех участников группы «Enterprise Admins», включая членов всех дочерних групп.

 

ССЫЛКИ ПО ТЕМЕ

Online version: http://go.microsoft.com/fwlink/?LinkID=144954
Add-ADGroupMember
Remove-ADGroupMember
Add-ADPrincipalGroupMembership
Get-ADPrincipalGroupMembership
Remove-ADPrincipalGroupMembership
Get-ADGroup

]]>
https://coolcode.ru/powershell-get-adgroupmember/feed/ 0
PowerShell. Set-ADUser https://coolcode.ru/powershell-set-aduser/ https://coolcode.ru/powershell-set-aduser/#respond Tue, 11 Oct 2016 06:05:44 +0000 http://coolcode.ru/?p=10078

ОПИСАНИЕ

Изменяет пользователя Active Directory.

СИНТАКСИС

Set-ADUser [-Identity] <ADUser> [-AccountExpirationDate <System.Nullable[System.DateTime]>] [-AccountNotDelegated <System.Nullable[bool]>] [-Add <hashtable>] [-AllowReversiblePasswordEncryption <System.Nullable[bool]>] [-CannotChangePassword <System.Nullable[bool]>] [-Certificates <hashtable>] [-ChangePasswordAtLogon <System.Nullable[bool]>] [-City <string>][-Clear <string[]>] [-Company <string>] [-Country <string>] [-Department <string>] [-Description <string>] [-DisplayName <string>] [-Division <string>] [-EmailAddress <string>] [-EmployeeID <string>] [-EmployeeNumber <string>] [-Enabled <System.Nullable[bool]>] [-Fax <string>] [-GivenName <string>] [-HomeDirectory <string>] [-HomeDrive <string>] [-HomePage <string>] [-HomePhone <string>] [-Initials <string>] [-LogonWorkstations <string>] [-Manager <ADUser>] [-MobilePhone <st
ring>] [-Office <string>] [-OfficePhone <string>] [-Organization <string>] [-OtherName <string>] [-PasswordNeverExpires <System.Nullable[bool]>] [-PasswordNotRequired <System.Nullable[bool]>] [-POBox <string>] [-PostalCode <string>] [-ProfilePath <string>] [-Remove <hashtable>] [-Replace <hashtable>] [-SamAccountName <string>] [-ScriptPath <string>] [-ServicePrincipalNames <hashtable>] [-SmartcardLogonRequired <System.Nullable[bool]>] [-State <string>] [-StreetAddress <string>] [-Surname <string>] [-Title <string>] [-TrustedForDelegation <System.Nullable[bool]>] [-UserPrincipalName <string>] [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <string>] [-PassThru <switch>] [-Server <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

Set-ADUser -Instance <ADUser> [-SamAccountName <string>] [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <string>] [-PassThru <switch>] [-Server <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

 

ОПИСАНИЕ

Командлет Set-ADUser изменяет свойства пользователя Active Directory. Значения часто используемых свойств можно изменятьс помощью параметров командлета. Значения свойств, не связанные с параметрами командлета, можно изменять с помощью параметров Add, Replace, Clear и Remove.

Параметр Identity определяет, какого пользователя Active Directory коснутся изменения. Пользователя можно идентифицировать по его различающемуся имени (DN), значению GUID, идентификатору безопасности (SID) или имени учетной записи SAM. Можно также присвоить параметру Identity переменную объекта, например $, или передать в параметр Identity объект по конвейеру. Например, можно использовать командлет Get-ADUser, чтобы получить объект пользователя, и затем передать этот объект по конвейеру командлету Set-ADUser.

С помощью параметра Instance можно обновить объект пользователя, применив изменения, внесенные в копию объекта. Если указать в параметре Instance копию объекта пользователя Active Directory, который был изменен, командлет Set-ADUser внесет такие же изменения в исходный объект пользователя. Чтобы получить копию объекта, который требуется изменить, воспользуйтесь объектом Get-ADUser. При использовании параметра Instance параметр Identity запрещен. Дополнительные сведения о параметре Instance см. в описании параметра Instance. Дополнительные сведения об использовании понятия Instance в командлетах Active Directory см. в разделе about_ActiveDirectory_Instance.

Следующие примеры показывают, как вносить изменения в свойство Manager объекта пользователя, используя следующие три метода.
— Задание параметров Identity и Manager.
— Передача объекта пользователя по конвейеру и задание параметра Manager.
— Задание параметра Instance.

Метод 1. Изменение свойства Manager для пользователя «saraDavis» с помощью параметров Identity и Manager.

Set-ADUser -Identity "InnaOzhogina" -Manager "VadimKorepin"

Метод 2. Изменение свойства Manager для пользователя «saraDavis» путем передачи пользователя «saraDavis» по конвейеру изадания параметра Manager.

Get-ADUser -Identity "InnaOzhogina" | Set-ADUser -Manager "VadimKorepin"

Метод 3. Изменение свойства Manager пользователя «saraDavis» с использованием командной строки Windows PowerShell для изменения локального экземпляра пользователя «saraDavis». После этого необходимо присвоить параметру Instance локальный экземпляр.

$user = Get-ADUser -Identity "InnaOzhogina"
$user.Manager = "VadimKorepin"
Set-ADUser -Instance $user.

Для сред AD LDS необходимо задать параметр Partition за исключением двух следующих случаев.
— Командлет запускается с диска поставщика Active Directory.
— Для среды AD LDS определен контекст или раздел именования по умолчанию. Чтобы задать контекст именования по умолчанию для среды AD LDS, задайте значение свойства msDS-defaultNamingContext объекта агента служб каталогов (DSA) Active Directory (nTDSDSA) для экземпляра AD LDS.

 

ПАРАМЕТРЫ

-AccountExpirationDate <System.Nullable[System.DateTime]>

Задает дату окончания срока действия учетной записи. Если задать для этого параметра значение 0, срок действия учетной записи никогда не истечет. Этот параметр задает свойство AccountExpirationDate объекта учетной записи. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «accountExpires».

При задании этого параметра используйте синтаксис DateTime. Предполагается местное время, если не указано иное. Если значение времени не задано, предполагается 00:00:00 по местному времени. Если дата не указана, предполагается текущая дата. В следующем примере показан стандартный синтаксис определения объекта DateTime.
«4/17/2006»
«17.04.06»
«14:22:45»
«17.04.06 14:22:45»

В этих примерах задается одно и то же значение времени и даты без секунд.
«17.04.2006 14:22»
«17.04.06 14:22»
«14:22»

В следующем примере показано, как задать дату и время по стандарту RFC1123. В данном примере время определено по Гринвичу (GMT).
«Пн, 17 апр 2006 г., 21:22:48 GMT»

В следующем примере показано, как задать значение времени приема-передачи в формате UTC. В данном примере задано значение «Понедельник, 17 апреля 2006 г., 14:22:48 по времени UTC».
«2006-04-17T14:22:48.0000000»

В следующем примере показано, как присвоить этому параметру значение «1 мая 2012 г., 17:00».

-AccountExpirationDate "01.05.2012 17:00:00"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-AccountNotDelegated <System.Nullable[bool]>

Определяет, делегируется ли контекст безопасности пользователя службе. Если этот параметр имеет значение «true», контекст безопасности учетной записи не делегируется службе, даже если учетная запись службы является доверенной для делегирования Kerberos. Этот параметр задает свойство AccountNotDelegated для учетной записи Active Directory. Этот параметр также устанавливает флаг ADS_UF_NOT_DELEGATED атрибута контроля учетных записей Active Directory. Возможные значения параметра:
$false или 0
$true или 1

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

-AccountNotDelegated $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Add <hashtable>

Задает значения для добавления в свойство объекта. Этот параметр служит для добавления одного или нескольких значений в свойство, которое нельзя изменить с помощью параметра командлета. Для изменения свойства объекта требуется отображаемое имя LDAP. Можно задать несколько значений, указав их через запятую, а также несколько свойств, разделив их точками с запятой. Параметр имеет следующий формат:
-Add @{Attribute1LDAPDisplayName=значение1, значение2, …; Attribute2LDAPDisplayName=значение1, значение2, …; AttributeNLDAPDisplayName= значение1, значение2, …}

Например, чтобы удалить значение «555-222-2222» и добавить значения «555-222-1111» и «555-222-3333» в атрибут Phone-Office-Other (отображаемое имя LDAP «otherTelephone»), а также добавить значение «555-222-9999» в атрибут Phone-Mobile-Other (отображаемое имя LDAP «otherMobile»), установите для параметров Add и Remove следующие значения.

-Add @{otherTelephone='555-222-1111', '555-222-3333'; otherMobile='555-222-9999' } -Remove @{otherTelephone='555-222-2222'}

При одновременном использовании параметров Add, Remove, Replace и Clear операции выполняются в следующем порядке:
..Remove
..Add
..Replace

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-AllowReversiblePasswordEncryption <System.Nullable[bool]>

Определяет, разрешено ли для данной учетной записи обратимое шифрование пароля. Этот параметр задает свойство AllowReversiblePasswordEncryption учетной записи. Этот параметр также устанавливает флаг ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED атрибута контроля учетных записей Active Directory. Возможные значения параметра:
$false или 0
$true или 1

В следующем примере показано, как присвоить этому параметру значение «true».

-AllowReversiblePasswordEncryption $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-AuthType <ADAuthType>

Задает используемый метод проверки подлинности. Возможные значения параметра:
Negotiate или 0
Basic или 1

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

Для метода проверки подлинности Basic требуется SSL-соединение.

В следующем примере показано, как присвоить этому параметру значение Basic.

-AuthType Basic

Возможные значения параметра:

Negotiate

Basic

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию Microsoft.ActiveDirectory.Management.AuthType.Negotiate
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-CannotChangePassword <System.Nullable[bool]>

Определяет, можно ли изменять пароль данной учетной записи. Этот параметр задает свойство CannotChangePassword учетной записи. Возможные значения параметра:
$false или 0
$true или 1

В следующем примере показано, как задать этот параметр так, чтобы можно было изменить пароль учетной записи.

-CannotChangePassword $false

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

 -Certificates <hashtable>

Изменяет сертификаты X.509v3 учетной записи в DER-кодировке. Эти сертификаты включают сертификаты открытых ключей, выданные этой учетной записи службой сертификации (Microsoft). Этот параметр задает свойство Certificates объекта учетной записи. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «userCertificate».

Синтаксис:
Чтобы добавить значения, введите строку:
-Certificates @{Add=значение1,значение2,…}
Чтобы удалить значения, введите строку:
-Certificates @{Remove=значение3,значение4,…}
Чтобы заменить значения, введите строку:
-Certificates @{Replace=значение1,значение2,…}
Чтобы очистить все значения, введите строку:
-Certificates $null

С помощью списка значений, разделенных точкой с запятой, можно задать несколько операций одновременно. Например, длядобавления и удаления значений параметра Certificate используйте следующий синтаксис:
-Certificates @{Add=значение1,значение2,…};@{Remove=значение3,значение4,…}

Операторы будут применены в следующей последовательности:
..Remove
..Add
..Replace

В следующем примере показано, как создать сертификат с помощью командлета New-Object, а затем добавить этот сертификат к учетной записи пользователя. При выполнении этого командлета вместо строки <пароль сертификата> подставляется пароль, используемый для добавления сертификата.

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate certificate1.cer <пароль сертифика та>
Set-ADUser innaozhogina -Certificates @{Add=$cert}

В следующем примере показано, как добавить сертификат, заданный в виде массива байтов.

Set-ADUser innaozhogina -Certificates @{Add= [Byte[]](0xC5,0xEE,0x53,...)}

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-ChangePasswordAtLogon <System.Nullable[bool]>

Определяет, нужно ли изменить пароль при очередной попытке входа в систему. Возможные значения параметра:
$false или 0
$true или 1

Этому параметру нельзя присвоить значение $true или 1 для учетной записи, свойство PasswordNeverExpires которой также имеет значение true.

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

-ChangePasswordAtLogon $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-City <string>

Задает город пользователя. Этот параметр задает свойство City пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «l».

В следующем примере показано, как задать этот параметр.

-City "Москва"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Clear <string[]>

Задает массив свойств объекта, которые будут очищены в каталоге. Этот параметр служит для очистки одного или нескольких значений свойства, которое нельзя изменить с помощью параметра командлета. Для изменения свойства объекта требуется отображаемое имя LDAP. С помощью списка разделенных запятыми значений можно изменить несколько свойств одновременно. Параметр имеет следующий формат:
-Clear Attribute1LDAPDisplayName, Attribute2LDAPDisplayName

Например, чтобы очистить значение атрибута Phone-Office-Other (отображаемое имя LDAP ‘otherTelephone’), задайте параметр Clear следующим образом.

-Clear otherTelephone

При одновременном использовании параметров Add, Remove, Replace и Clear операции выполняются в следующем порядке:
..Remove
..Add
..Replace
..Clear

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Company <string>

Задает компанию пользователя. Этот параметр задает свойство Company объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «company».

В следующем примере показано, как задать этот параметр.

-Company "Contoso"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Country <string>

Задает код страны или региона для выбранного пользователем языка. Этот параметр задает свойство Country объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «c». Это значение не используется в Windows 2000.

В следующем примере показано, как задать этот параметр.

-Country "IN"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Credential <PSCredential>

Задает параметры учетной записи пользователя для выполнения задачи. Учетными данными по умолчанию являются учетные данные текущего пользователя, вошедшего в систему, если только командлет не выполняется с диска поставщика Active Directory PowerShell. Если командлет выполняется с такого диска поставщика, в качестве значения по умолчанию используется учетная запись, связанная с диском.

Чтобы задать этот параметр, можно ввести имя пользователя, например «User1» или «Domain01\User01», либо указать объект PSCredential. Если для этого параметра задать имя пользователя, командлет запросит пароль.

Кроме того, объект PSCredential можно создать с помощью скрипта или командлета Get-Credential. Затем параметру Credential можно присвоить значение объекта PSCredential. В следующем примере показано как создать учетные данные.

$AdminCredentials = Get-Credential "Domain01\User01"

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

-Credential $AdminCredentials

Если для используемых учетных данных не установлены полномочия на уровне каталога для выполнения задачи, Active Directory PowerShell вернет прерывающую ошибку.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Department <string>

Задает отдел пользователя. Этот параметр задает свойство Department для пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «department».

В следующем примере показано, как задать этот параметр.

-Department "Development"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Description <string>

Задает описание объекта. Этот параметр задает значение свойства Description объекта. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «description».

В следующем примере показано, как присвоить этому параметру описание.

-Description "Описание объекта"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-DisplayName <string>

Задает отображаемое имя объекта. Этот параметр задает свойство DisplayName объекта. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «displayName».

В следующем примере показано, как задать этот параметр.

-DisplayName "Ноутбук Инны Ожогиной"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Division <string>

Задает отделение пользователя. Этот параметр задает свойство Division объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «division».

В следующем примере показано, как задать этот параметр.

-Division "Software"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-EmailAddress <string>

Задает адрес электронной почты пользователя. Этот параметр задает свойство EmailAddress объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «mail».

В следующем примере показано, как задать этот параметр.

-EmailAddress "innaozhogina@contoso.com"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-EmployeeID <string>

Задает ИД сотрудника этого пользователя. Этот параметр задает свойство EmployeeID объекта пользователя. Отображаемоеимя LDAP (ldapDisplayName) для этого свойства: «employeeID».

В следующем примере показано, как задать этот параметр.

-EmployeeID "A123456"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-EmployeeNumber <string>

Задает номер сотрудника, присвоенный пользователю. Этот параметр задает свойство EmployeeNumber объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «employeeNumber».

В следующем примере показано, как задать этот параметр.

-EmployeeNumber "12345678"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Enabled <System.Nullable[bool]>

Указывает, активна ли учетная запись. Для активной учетной записи необходимо указать пароль. Этот параметр задает свойство Enabled объекта учетной записи. Этот параметр также устанавливает флаг ADS_UF_ACCOUNTDISABLE атрибута контроля учетных записей Active Directory. Возможные значения параметра:
$false или 0
$true или 1

В следующем примере показано, как настроить этот параметр для включения учетной записи.

-Enabled $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

-Fax <string>
Задает номер факса пользователя. Этот параметр задает свойство Fax объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «facsimileTelephoneNumber».

В следующем примере показано, как задать этот параметр.

-Fax "+1 (999) 555 1212"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-GivenName <string>

Задает имя пользователя (без фамилии). Этот параметр задает свойство GivenName объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «givenName».

В следующем примере показано, как задать этот параметр.

-givenName "Ivan"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-HomeDirectory <string>

Указывает домашний каталог пользователя. Этот параметр задает свойство HomeDirectory объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «homeDirectory».

В следующем примере показано, как задать этот параметр.

-HomeDirectory "\\users\InnaOzhoginaHomeDir"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-HomeDrive <string>

Задает диск, связанный с UNC-путем, определенным свойством HomeDirectory. Буква диска указывается как «<буква_диска:», где <буква_диска> задает букву сопоставляемого диска. <буква_диска> — одна заглавная буква, двоеточие после нее обязательно. Этот параметр задает свойство HomeDrive объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «homeDrive».

В следующем примере показано, как задать этот параметр.

-HomeDrive "D:"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-HomePage <string>

Задает URL-адрес домашней страницы объекта. Этот параметр задает свойство homePage объекта Active Directory. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «wWWHomePage».

В следующем примере показано, как присвоить этому параметру URL-адрес.

-HomePage "http://employees.contoso.com/ozhogina"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-HomePhone <string>

Задает номер домашнего телефона пользователя. Этот параметр задает свойство пользователя HomePhone. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «homePhone».

В следующем примере показано, как задать этот параметр.

-HomePhone "+1 (999) 555 1212"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Identity <ADUser>

Задает объект пользователя Active Directory, указывая одно из следующих значений свойств. Идентификатор в скобках представляет собой отображаемое имя LDAP атрибута.

Различающееся имя
Пример: CN=SaraDavis,CN=Europe,CN=Users,DC=corp,DC=contoso,DC=com
GUID (objectGUID)
Пример: 599c3d2e-f72d-4d20-8a88-030d99495f20
Идентификатор безопасности (objectSid)
Пример: S-1-5-21-3165297888-301567370-576410423-1103
Имя учетной записи SAM (sAMAccountName)
Пример: saradavis

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

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

В данном примере показано, как присвоить этому параметру различающееся имя.

-Identity "CN=InnaOzhogina,CN=Europe,CN=Users,DC=corp,DC=contoso,DC=com"

В данном примере показано, как присвоить этому параметру экземпляр объекта пользователя с именем «userInstance».
-Identity $userInstance

Необходимость параметров Обязательный параметр
Позиция? 1
Значение по умолчанию
Принимать входные данные конвейера?true (ByValue)
Принимать подстановочные знаки false

 

-Initials <string>

Задает инициалы пользователя. Можно использовать это значение для задания инициала дополнительного имени или отчества пользователя. Этот параметр задает свойство пользователя Initials. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «initials».

В следующем примере показано, как задать этот параметр.

-Initials "L"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Instance <ADUser>

Задает объект ADUser, идентифицирующий объект пользователя Active Directory, который требуется изменить, и набор изменений, которые требуется внести в этот объект. При указании этого параметра все изменения, внесенные в объект ADUser, также применяются к соответствующему объекту Active Directory. Командлет обновляет только изменившиеся свойства о бъекта.
Необходимо, чтобы объект ADUser, указанный в качестве значения параметра -Instance, был получен с помощью командлета Get-ADUser. При задании параметра Instance нельзя устанавливать другие параметры, определяющие отдельные свойства о бъекта.

В следующем примере показано, как использовать командлет Get-ADUser для получения экземпляра объекта ADUser. Объект изменяется с помощью командной строки Windows PowerShell. Затем командлет Set-ADUser сохраняет изменения для объекта Active Directory.

Шаг 1. Получение локального экземпляра объекта.

$userInstance = Get-ADUser -Identity innaOzhogina

Шаг 2. Изменение одного или нескольких свойств экземпляра объекта.

$userInstance.EmailAddress = "innaozhogina@contoso.com"

Шаг 3. Сохранение изменений для объекта.

Set-ADUser -Instance $userInstance

Необходимость параметров Обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-LogonWorkstations <string>

Задает компьютеры, к которым пользователь может получить доступ. Чтобы задать несколько компьютеров, используйте список значений, разделенных запятыми. Можно идентифицировать компьютер с помощью учетной записи SAM (sAMAccountName) или DNS-имени компьютера. Имя учетной записи SAM совпадает с NetBIOS-именем компьютера.

Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «userWorkStations».

В следующем примере показано, как задать этот параметр, используя значения SAMAccountName (NetBIOS-имя) и DNSHostName.

-LogonWorkstations "innaOzhoginaDesktop,innaOzhoginaLapTop,projectA.corp.contoso.com"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Manager <ADUser>

Задает руководителя пользователя. Этот параметр задает свойство пользователя Manager. Этот параметр задается путем у казания одного из следующих значений свойства. Примечание. Идентификатор в скобках представляет собой отображаемое имя LDAP свойства.

Различающееся имя
Пример: CN=SaraDavis,CN=Europe,CN=Users,DC=corp,DC=contoso,DC=com
GUID (objectGUID)
Пример: 599c3d2e-f72d-4d20-8a88-030d99495f20
Идентификатор безопасности (objectSid)
Пример: S-1-5-21-3165297888-301567370-576410423-1103
Имя учетной записи SAM (sAMAccountName)
Пример: saradavis

Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «manager».

В следующем примере показано, как задать этот параметр.

-Manager innaozhogina

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-MobilePhone <string>

Задает номер мобильного телефона пользователя. Этот параметр задает свойство MobilePhone объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «mobile».

В следующем примере показано, как задать этот параметр.

-MobilePhone "+1 (999 ) 555 1212"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Office <string>

Задает офис пользователя. Этот параметр задает свойство Office объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «office».

В следующем примере показано, как задать этот параметр.

-Office "D1042"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-OfficePhone <string>

Задает номер рабочего телефона пользователя. Этот параметр задает свойство OfficePhone объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «telephoneNumber».

В следующем примере показано, как задать этот параметр.

-OfficePhone "+1 (999) 555 1212"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Organization <string>

Задает организацию пользователя. Этот параметр задает свойство Organization объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «o».

В следующем примере показано, как задать этот параметр.

-Organization "Accounting"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-OtherName <string>

Задает дополнительное имя пользователя, например отчество. Этот параметр задает свойство OtherName объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «middleName».

В следующем примере показано, как задать этот параметр.

-OtherName "Ivanovich"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Partition <string>

Задает различающееся имя раздела Active Directory. Различающееся имя должно являться одним из контекстов именования текущего сервера каталогов. Командлет ищет в этом разделе объект, заданный параметром Identity. В следующих двух примерах показано, как задать значение этого параметра.

-Partition "CN=Configuration,DC=EUROPE,DC=TEST,DC=CONTOSO,DC=COM"

-Partition "CN=Schema,CN=Configuration,DC=EUROPE,DC=TEST,DC=CONTOSO,DC=COM"

Во многих случаях, если значение параметра Partition не указано, для него будет использоваться Значение по умолчанию,. Правила определения значения по умолчанию представлены ниже. Обратите внимание, что правила, указанные первыми, анализируются также первыми, и после определения значения по умолчанию никакие другие правила не рассматриваются.

В средах доменных служб Active Directory Значение по умолчанию, параметра Partition будет установлено в следующих случаях. — Если в качестве значения параметра Identity установлено различающееся имя, для формирования значения по умолчанию параметра Partition автоматически используется это различающееся имя.
— При запуске командлетов с диска поставщика Active Directory для формирования значения по умолчанию параметра Partition автоматически используется текущий путь на диске.
— Если ни один из представленных выше вариантов не применим, в качестве значения по умолчанию параметра Partition будет использоваться раздел по умолчанию или контекст именования целевого домена.

В средах AD LDS Значение по умолчанию, параметра Partition будет установлено в следующих случаях.
— Если в качестве значения параметра Identity установлено различающееся имя, для формирования значения по умолчанию параметра Partition автоматически используется это различающееся имя.
— При запуске командлетов с диска поставщика Active Directory для формирования значения по умолчанию параметра Partition автоматически используется текущий путь на диске.
— Если для целевого экземпляра AD LDS существует контекст именования по умолчанию, в качестве значения по умолчанию параметра Partition будет использоваться этот контекст именования. Чтобы задать контекст именования по умолчаниюдля среды AD LDS, задайте значение свойства msDS-defaultNamingContext объекта агента служб каталогов (DSA) Active Directory (nTDSDSA) для экземпляра AD LDS.
— Если ни один из представленных выше вариантов не применим, для параметра Partition не будет использоваться Значение по умолчанию,.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-PassThru <switch>
Возвращает новый или измененный объект. По умолчанию (если не указан параметр -PassThru) этот командлет не формирует никаких выходных данных.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-PasswordNeverExpires <System.Nullable[bool]>

Определяет, может ли истечь срок действия пароля учетной записи. Этот параметр задает свойство PasswordNeverExpires объекта учетной записи. Этот параметр также устанавливает флаг ADS_UF_DONT_EXPIRE_PASSWD атрибута контроля учетных записей Active Directory. Возможные значения параметра:
$false или 0
$true или 1

Примечание. Этому параметру нельзя присвоить значение $true или 1 для учетной записи, свойство ChangePasswordAtLogon которой также имеет значение true.

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

-PasswordNeverExpires $false

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-PasswordNotRequired <System.Nullable[bool]>

Определяет, требуется ли пароль для данной учетной записи. Этот параметр задает свойство PasswordNotRequired учетной записи, например учетной записи пользователя или компьютера. Этот параметр также устанавливает флаг ADS_UF_PASSWD_NOTREQD атрибута контроля учетных записей Active Directory. Возможные значения параметра:
$false или 0
$true или 1

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

-PasswordNotRequired $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-POBox <string>

Задает номер абонементного почтового ящика пользователя. Этот параметр задает свойство POBox объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «postOfficeBox».

В следующем примере показано, как задать этот параметр.

-POBox "25662"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-PostalCode <string>

Задает почтовый индекс пользователя. Этот параметр задает свойство PostalCode пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «postalCode».

В следующем примере показано, как задать этот параметр.

-PostalCode "28712"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-ProfilePath <string>

Задает путь к профилю пользователя. Это значение может представлять собой локальный абсолютный путь или UNC-путь. Этот параметр задает свойство ProfilePath объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «profilePath».

В следующих примерах показано, как присвоить этому параметру локальный путь или UNC-путь. -ProfilePath «E:\users\
profiles\innaOzhogina»

-ProfilePath "\\users\profiles\innaOzhogina"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Remove <hashtable>

Указывает, что командлет удаляет значения свойства объекта. Этот параметр служит для удаления одного или нескольких значений свойства, которое нельзя изменить с помощью параметра командлета. Для удаления свойства объекта требуется отображаемое имя LDAP. С помощью списка разделенных точками с запятой значений можно удалить несколько свойств одновременно. Параметр имеет следующий формат:
-Remove @{Attribute1LDAPDisplayName=value[]; Attribute2LDAPDisplayName=value[]}

Например, чтобы добавить значения «blue» и «green» и удалить значение «pink» из свойства с отображаемым именем LDAP
FavColors, установите значения параметров Add и Remove следующим образом.

-Add @{FavColors=Blue,Green} -Remove {FavColors=Pink}

При одновременном использовании параметров Add, Remove, Replace и Clear эти параметры применяются в следующей послед
овательности:
..Remove
..Add
..Replace
..Clear

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

 

-Replace <hashtable>

Задает значения свойства объекта, которые заменят текущие значения. Этот параметр служит для замены одного или нескольких значений свойства, которое нельзя изменить с помощью параметра командлета. Для изменения свойства объекта требуется отображаемое имя LDAP. С помощью списка разделенных запятыми значений можно изменить несколько свойств одновременно. Параметр имеет следующий формат:
-Replace @{Attribute1LDAPDisplayName=value[], Attribute2LDAPDisplayName=value[]}

Например, чтобы заменить в атрибуте Phone-Office-Other (отображаемое имя LDAP «otherTelephone») значения «555-222-2222» значениями «555-222-1111», установите для параметра Replace следующее значение.

-Replace @{otherTelephone='555-222-2222', '555-222-1111'}

При одновременном использовании параметров Add, Remove, Replace и Clear операции выполняются в следующем порядке:
..Remove
..Add
..Replace
..Clear

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-SamAccountName <string>

Задает имя учетной записи SAM пользователя, группы, компьютера или службы. Максимальная длина описания — 256 знаков. Для совместимости с более старыми операционными системами создайте имя учетной записи SAM длиной не более 20 знаков. Этот параметр задает свойство SAMAccountName объекта учетной записи. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «sAMAccountName».

В следующем примере показано, как задать этот параметр.

-SAMAccountName "innaozhogina"

Примечание. Если указанное строковое значение не заканчивается символом «$», система добавляет этот символ при необходимости.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-ScriptPath <string>

Задает путь к скрипту входа пользователя. Это значение может представлять собой локальный абсолютный путь или UNC-путь. Этот параметр задает свойство ScriptPath пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «scriptPath».

В следующем примере показано, как задать этот параметр.

-ScriptPath "\\logonScripts\innaozhoginaLogin"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Server <string>

Задает используемый для подключения экземпляр доменных служб Active Directory, указывая одно из следующих значений соответствующего доменного имени или сервера каталогов. Служба может относиться к следующим категориям: службы Active Directory облегченного доступа к каталогам, доменные службы Active Directory или снимки Active Directory.
Значения доменного имени:
Полное доменное имя
Примеры corp.contoso.com
NetBIOS-имя
Пример: CORP

Значения сервера каталогов:
Полное имя сервера каталогов
Пример: corp-DC12.corp.contoso.com
NetBIOS-имя
Пример: corp-DC12
Полное имя сервера каталогов и порт
Пример: corp-DC12.corp.contoso.com:3268

Значение параметра Server по умолчанию определяется одним из следующих методов в указанном ниже порядке.
— Используя значение Server из объектов, переданных по конвейеру.
— Используя информацию о сервере, связанную с диском поставщика Active Directory PowerShell, если запуск выполнен с этого диска.
— Используя домен компьютера, на котором выполняется Powershell.

В следующем примере показано, как указать в качестве значения параметра полное доменное имя.

-Server "corp.contoso.com"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-ServicePrincipalNames <hashtable>

Задает имена участников-служб для учетной записи. Этот параметр задает свойство ServicePrincipalNames учетной записи. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «servicePrincipalName». Для добавления, замены или очистки значений имен служб-участников этот параметр использует следующий синтаксис. Синтаксис:
Чтобы добавить значения, введите строку:
-ServicePrincipalNames @{Add=значение1,значение2,…}
Чтобы удалить значения, введите строку:
-ServicePrincipalNames @{Remove=значение3,значение4,…}
Чтобы заменить значения, введите строку:
-ServicePrincipalNames @{Replace=значение1,значение2,…}
Чтобы очистить все значения, введите строку:
-ServicePrincipalNames $null

С помощью списка значений, разделенных точкой с запятой, можно задать несколько изменений одновременно. Например, для добавления и удаления имен участников-служб используйте следующий синтаксис:
@{Add=значение1,значение2,…};@{Remove=значение3,значение4,…}

Операторы будут применены в следующей последовательности:
..Remove
..Add
..Replace

В следующем примере показано, как добавлять и удалять имена участников-служб.

-ServicePrincipalNames-@{Add="SQLservice\accounting.corp.contoso.com:1456"};{Remove="SQLservice\finance.corp.contoso.com:1456"}

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-SmartcardLogonRequired <System.Nullable[bool]>

Задает, требуется ли смарт-карта для входа в систему. Этот параметр задает свойство SmartCardLoginRequired для пользователя. Этот параметр также устанавливает флаг ADS_UF_SMARTCARD_REQUIRED атрибута контроля учетных записей Active Directory. Возможные значения параметра:
$false или 0
$true или 1

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

-SmartCardLogonRequired $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-State <string>

Задает область или край для пользователя или организационного подразделения. Этот параметр задает свойство State объекта пользователя или подразделения. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «st».

В следующем примере показано, как задать этот параметр.

-State "Московская область"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-StreetAddress <string>

Задает почтовый адрес пользователя. Этот параметр задает свойство StreetAddress объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «streetAddress».

В следующем примере показано, как задать этот параметр.

-StreetAddress "ул. Ленина 45-10"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Surname <string>

Задает фамилию пользователя. Этот параметр задает свойство Surname объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «sn».

В следующем примере показано, как задать этот параметр.

-Surname "Komashinsky"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Title <string>

Задает должность пользователя. Этот параметр задает свойство Title объекта пользователя. Отображаемое имя LDAP (ldapDisplayName) для этого свойства: «title».

В следующем примере показано, как задать этот параметр.

-Title "Manager"

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-TrustedForDelegation <System.Nullable[bool]>

Определяет, является ли учетная запись доверенной для делегирования Kerberos. Служба, которая выполняется от имени учетной записи, доверенной для делегирования Kerberos, может заменить клиент, запрашивающий службу. Этот параметр задает свойство TrustedForDelegation объекта учетной записи. Это значение также устанавливает флаг ADS_UF_TRUSTED_FOR_DELEGATION атрибута контроля учетных записей пользователей Active Directory. Возможные значения параметра:
$false или 0
$true или 1

В следующем примере показано, как указать, что учетная запись является доверенной для делегирования Kerberos.

-TrustedForDelegation $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-UserPrincipalName <string>

Для каждой учетной записи пользователя существует имя участника-пользователя (UPN) в формате <имя_пользователя>@. UPN представляет собой назначенное администратором удобное для пользователя и легко запоминаемое имя, длина которого меньше различающегося имени LDAP, используемого системой. Имя участника-пользователя не зависит от различающегося имени объекта, поэтому объект пользователя можно переместить или переименовать без изменения имени пользователя для входа в систему. При входе в систему с использованием имени участника-пользователя теперь не требуется выбирать домен из списка в диалоговом окне входа в систему.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-Confirm [<SwitchParameter>]

Запрашивает подтверждение перед выполнением команды.

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

 

-WhatIf [<SwitchParameter>]

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

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера false
Принимать подстановочные знаки false

Этот командлет поддерживает общие параметры: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable и OutVariable. Дополнительные сведения см. в статьеabout_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).

 

ВХОДНЫЕ ДАННЫЕ

Нет или Microsoft.ActiveDirectory.Management.ADUser

Объект пользователя занесен в параметр Identity.

Объект пользователя, который был получен с помощью командлета Get-ADUser, а затем изменен, заносится в параметр Instance.

 

ВЫХОДНЫЕ ДАННЫЕ

Нет или Microsoft.ActiveDirectory.Management.ADUser

Возвращает измененный объект пользователя, если задан параметр PassThru. По умолчанию этот командлет не формирует никаких выходных данных.

 

ПРИМЕЧАНИЯ

Этот командлет не работает со снимками Active Directory.
Этот командлет не работает с контроллером домена, доступным только для чтения.

 

ПРИМЕР 1

Set-ADUser AntonioAl -HomePage 'http://fabrikam.com/employees/AntonioAl' -LogonWorkstations 'AntonioAl-DSKTOP,AntonioAl-LPTOP'

Задает пользователю с именем учетной записи SAM «AntonioAL» свойство «homepage» со значением «http://fabrikam.com/employees/AntonioAl» и свойство «LogonWorkstations» со значением «AntonioAl-DSKTOP,AntonioAl-LPTOP».

 

ПРИМЕР 2

Get-ADUser -Filter 'Name -like "*"' -SearchBase 'OU=HumanResources,OU=UserAccounts,DC=FABRIKAM,DC=COM' -Properties DisplayName | % {Set-ADUser $_ -DisplayName ($_.Surname + ' ' + $_.GivenName)}

Получает всех пользователей в каталоге, находящихся в подразделении «OU=HumanResources,OU=UserAccounts,DC=FABRIKAM,DC=COM». Задает объектам этих пользователей свойство DisplayName со значением, получаемым путем объединения свойств Surnameи GivenName.

 

ПРИМЕР 3

Set-ADUser GlenJohn -Replace @{title="director";mail="glenjohn@fabrikam.com"}

Задает пользователю с именем учетной записи SAM «GlenJohn» свойство «title» со значением «director» и свойство «mail» созначением «glenjohn@fabrikam.com».

 

ПРИМЕР 4

Set-ADUser GlenJohn -Remove @{otherMailbox="glen.john"} -Add @{url="fabrikam.com"} -Replace @{title="manager"} -Clear description

Изменяет объект с именем учетной записи SAM «GlenJohn», удаляя строку «glen.john» из свойства «otherMailbox», добавляя строку «fabrikam.com» в свойство «url», заменяя значение свойства «title» на «manager» и очищая свойство «description».

 

ПРИМЕР 5

$user = Get-ADUser GlenJohn -Properties mail,department
$user.mail = "glen@fabrikam.com"
$user.department = "Accounting"
Set-ADUser -instance $user

Задает свойства «mail» и «department» объекту пользователя с именем учетной записи SAM «GlenJohn», используя параметр «instance».

 

ПРИМЕР 6

# create a byte array for the M-F 8:00 am to 5 pm logon hours
$hours = New-Object byte[] 21
$hours[5] = 255; $hours[8] = 255; $hours[11] = 255; $hours[14] = 255; $hours[17] = 255;
$hours[6] = 1; $hours[9] = 1; $hours[12] = 1; $hours[15] = 1; $hours[18] = 1;

# create a hashtable to update the logon hours and a description
$replaceHashTable = New-Object HashTable
$replaceHashTable.Add("logonHours", $hours)
$replaceHashTable.Add("description", "Sarah Davis can only logon from Monday through Friday from 8:00 AM to 5:00 PM")

# set the value of the logonHours and description attributes
Set-ADUser "SarahDavis" -Replace $replaceHashTable

Задает время входа пользователей в систему с понедельника по пятницу с 8:00 до 17:00 и добавляет описание. Обновляет атрибут «logonHours» указанным массивом байтов, а атрибут «description» — указанной строкой.

 

ССЫЛКИ ПО ТЕМЕ

Online version: http://go.microsoft.com/fwlink/?LinkID=144991
Get-ADUser
New-ADUser
Remove-ADUser

]]>
https://coolcode.ru/powershell-set-aduser/feed/ 0
PowerShell. Парсинг сайта или забрать значение с сайта. https://coolcode.ru/powershell-parsing-sayta-ili-zabrat-znachenie-s-sayta/ https://coolcode.ru/powershell-parsing-sayta-ili-zabrat-znachenie-s-sayta/#comments Mon, 18 Apr 2016 10:25:46 +0000 http://coolcode.ru/?p=8087

Иногда при выполнении скрипта приходится опираться на значения с web сайтов. В PowerShell с версии 3.0 для этого имеется замечательный командлет Invoke-WebRequest.

Рассмотрим подробнее скрипт:

!!!В строчке $trash = $li.innerhtml -match " \ ( ( . * ? ) \ ) " убрать пробелы внутри ковычек » \ ( ( . * ? ) \ ) «.!!!

$ie = Invoke-WebRequest -Uri 'http://coolcode.ru' -Method POST -ContentType "text/plain; charset=utf-8"
$li=$ie.AllElements |where {($_.tagName -eq "LI") -and ($_.innerhtml -like "*Администрирование*")}
$trash = $li.innerhtml -match " \ ( (.*?) \ ) "
$Matches[1]

Этот скрипт выполняет следующие действие: на сайте «http://coolcode.ru» мы находим рубрику «Администрирование» и смотрим сколько в данной рубрике статей.

В начале мы создаём объект, со страницей сайта:

$ie = Invoke-WebRequest -Uri 'http://coolcode.ru' -Method Get -ContentType "text/plain; charset=utf-8"

Здесь используется самая главный командлет Invoke-WebRequest

В данном примере мы используем только необходимые параметры:

-Uri <String>

Командлет Invoke-WebRequest поддерживает следущие протоколы: HTTP, HTTPS, FTP, и FILE.  В данном параметре необходимо указать url к странице, в нашем случае это http://coolcode.ru’.

-Method <WebRequestMethod>

Определяет метод используемый для веб-запроса. Допустимые значения: Default, Delete, Get, Head, Merge, Options, Patch, Post, Put и Trace.

Пробежимся в крации по ним:

Head Получение заголовка, без тела. В основном используется для получения матаданных.

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

Options Применяется для определения возможностей веб-сервера или параметров соединения.

Post Используется для передачи данных на сервер.

Put Загрузка содержимого на указанный uri.

Patch Тоже самое, что и Put но только применяется на фрагмент ресурса

Delete Удаляет указанный ресурс.

Тrace Возвращает полученный запрос, с информацией о добавлении и изменении запроса промежуточными серверами.

Merge

В своём примере я использую значение POST. Хоть мне надо всего лишь получить данные из тела страницы и в первой редакции этой статьи я использовал метод GET, но с методом GET как то через раз отрабатывал параметр -contentType.

 -ContentType <String>

Задаёт тип содержимого в веб-запросе. по умолчанию «application/x-www-form-urlencoded». Я использую данный метод, для получения данных в правильной кодировке :-ContentType «text/plain; charset=utf-8». У меня почему то этот параметр через раз работал с «-Method GET», после изменения на «-Method POST» всё работает корректно.

У командлета Invoke-WebRequest существуют так же ещё много интересных параметров, которые могут быть вам интересны:

-Body<Object>

Данный параметр задаёт тело запроса, и используется для заполнения полей на сайте. (этот параметр  рассмотрим в другой статье)

-Certificate<X509Certificate>

Задаёт сертификат, для реализации безопасности в веб-запросе. Что бы найти сертификат воспользуйтесь командлетом Get-PfxCertificate или используйте Get-ChieldItem на диске Cert:. Если сертификат не действительный или не имеет достаточных полномочий, команда не выполнится.

-CertificateThumbprint<String>

Задаёт учётную запись пользователя, который имеет право на отправку запроса на цифровой сертификат открытого ключа (X509).

-Credential<PSCredential>

Задаёт учётную запись пользователя, который имеет разрешение на отправку запроса. По умолчанию используется текущий пользователь.

-DisableKeepAlive

Устанавливает значение постоянного HTTP соединения в HTTP-заголовке в значение False. По умолчанию постоянное HTTP соединение включено.

-Headers<IDictionary>

Устанавливает заголовок веб-запроса. Можно указать хэш-таблицу или словарь.

-InFile<String>

Получение содержимого веб-запроса из файла.

Определяет, сколько раз Windows PowerShell может совершить попыток для соединение с заданным URI, прежде чем возникнет ошибка подключения. По умолчанию значение 5. Значение 0 блокирует все попытки.

-OutFile<String>

Сохраняет тело ответа в указанный файл.

-PassThru

Возвращает результаты в консоль, в дополнении к записи результатов в файл. Используется вместе с параметром -OutFile

-Proxy<Uri>

Задаёт прокси сервер для выполнения запроса.

-ProxyCredential<PSCredential>

Параметры учётной записи для прокси. Например «User01» или «Domain01\User01».

-ProxyUseDefaultCredentials

Для соединением с прокси использовать учётные данные текущего пользователя.

-SessionVariable<String>

Создаёт сеанс веб-запроса в и сохраняет его в значение указанной переменной. Переменную необходимо вводить без знака доллара «$». При указании переменной сеанса, Invoke-WebRequest создаёт объект сеанса веб-запроса и присваивает его переменной с указанным именем. Вы сможете использовать данную переменную, как только закончится выполнение запроса. Данный объект не является постоянным соединением. Он содержит информацию о связи запроса, кукисы, учётные данные, максимальные значения количества соединений и строки агента пользователя. Этот объект можно использовать для обмена состояниями данных, между веб-запросами.

-TimeoutSec<Int32>

Данный параметр задаёт время, в течении которого запрос может находится в ожидании. Время указывается в секундах. Значение по умолчанию 0, что укзывает на неопределённый тайм-аут(сколько угодно долгий).

-TransferEncoding<String>

Определяет значение зжатия для заголовка HTTP. Допустимы значения Chunked, Compress, Deflate, GZip и Identity.

-UseBasicParsing

Использование объекта ответа для HTML без синтаксического анализа DOM.

-UseDefaultCredentials

Использование учётных данных текущего пользователя, для отправки веб-запроса.

-UserAgent<String>

Использовать строку для аутентификации сайтом агента. По умолчанию используется «Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0».

-WebSession<WebRequestSession>

Назначает сеанс веб-запроса.  Переменная указывается со знаком доллора($).

Что бы изменить значение параметров в сеансе веб, используйте параметры командлета, например UserAgent или Credential. Параметры командлета имеют больший приоритет, чем значчения в сессии веб-запроса.

В полученной переменной будет содержаться информация о

 

После исполнения команды

$ie = Invoke-WebRequest -Uri 'http://coolcode.ru' -Method Get -ContentType "text/plain; charset=utf-8"

У будет объект, содержащий данные страницы http://coolcode.ru, но это не просто текст, а как и всё в PowerShell это объект. И у него есть очень интересные свойства:

PS C:\Windows\system32> $ie|Get-Member


   TypeName: Microsoft.PowerShell.Commands.HtmlWebResponseObject

Name              MemberType Definition                                                                 
----              ---------- ----------                                                                 
Equals            Method     bool Equals(System.Object obj)                                             
GetHashCode       Method     int GetHashCode()                                                          
GetType           Method     type GetType()                                                             
ToString          Method     string ToString()                                                          
AllElements       Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection AllElements {get;}
BaseResponse      Property   System.Net.WebResponse BaseResponse {get;set;}                             
Content           Property   string Content {get;}                                                      
Forms             Property   Microsoft.PowerShell.Commands.FormObjectCollection Forms {get;}            
Headers           Property   System.Collections.Generic.Dictionary[string,string] Headers {get;}        
Images            Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Images {get;}     
InputFields       Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection InputFields {get;}
Links             Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Links {get;}      
ParsedHtml        Property   mshtml.IHTMLDocument2 ParsedHtml {get;}                                    
RawContent        Property   string RawContent {get;}                                                   
RawContentLength  Property   long RawContentLength {get;}                                               
RawContentStream  Property   System.IO.MemoryStream RawContentStream {get;}                             
Scripts           Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Scripts {get;}    
StatusCode        Property   int StatusCode {get;}                                                      
StatusDescription Property   string StatusDescription {get;}

Рассмотрим их:

AllElements — Возвращает массив свойств всех элементов.
Forms — Возвращает массив свойств всех форм.
Images — Возвращает массив всех свойств изображений.
InputFields — Возвращает массив всех свойств полей воода.
Links — Возвращает массив свойств ссылок.
ParsedHtml — Возвращает странцу ввиде дерева объектов.
Scripts — Возвращает массив свойств всех скриптов.

Content — Возвращает содержимое страницы.

 

И переходим к следующей строчке скрипта:

$li=$ie.AllElements |where {($_.tagName -eq "LI") -and ($_.innerhtml -like "*Администрирование*")}

 

$li=$ie.AllElements

В моём случае я использую свойство AllElements объекта $ie . И у меня получится массив элементов страницы … каждый элемент будет являтся объектов со следующими свойствами:

$ie.AllElements |Get-Member

   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition                    
----        ----------   ----------                    
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()             
GetType     Method       type GetType()                
ToString    Method       string ToString()             
innerHTML   NoteProperty  innerHTML=null               
innerText   NoteProperty  innerText=null               
outerHTML   NoteProperty  outerHTML=null               
outerText   NoteProperty  outerText=null               
tagName     NoteProperty System.String tagName=!

Рассмотрим его свойства:

tagName — имя элемента (div,li,p,a…)
innerHTML — HTML код внутри тэга.
innerText — Отображаемый код из тега.
outerHTML  — Код всего тэга.
outerText — текс который отображается из этого тэга.

 

В нашем примере я использую  свойства tagName и innerHTML которые должны равнятся соответствующим значениям:

where {($_.tagName -eq "LI") -and ($_.innerhtml -like "*Администрирование*")}

как я узнал каким значениям должны ровняться данные параметры?

Я посмотрел код страницы. В Chrome и Firefox например, можно выделить интересующий вас участок и нажав правую кнопку выбрать в выпадающем списке кнопку звучащую примерно, как «Просмотреть код».

Но вернёмся к скрипту. После отработки строчки:

$li=$ie.AllElements |where {($_.tagName -eq "LI") -and ($_.innerhtml -like "*Администрирование*")}

в переменной $li у нас будет содержаться код тэга li с кодом внутри содержащим слово «Администрирование».

Теперь из него осталось достать нужную нам информацию… а конкретно значение в скобках. Я предлагаю воспользоваться регулярным выражением:

!!!В строчке $trash = $li.innerhtml -match " \ ( ( . * ? ) \ ) " убрать пробелы внутри ковычек » \ ( ( . * ? ) \ ) «.!!!

$trash = $li.innerhtml -match " \ ( ( . * ? ) \ ) "
$Matches[1]

Нужное нам значение получено.

]]>
https://coolcode.ru/powershell-parsing-sayta-ili-zabrat-znachenie-s-sayta/feed/ 6
Autoit. Взаимодействие с сайтом. https://coolcode.ru/autoit-vzaimodeystvie-s-saytom/ https://coolcode.ru/autoit-vzaimodeystvie-s-saytom/#comments Tue, 29 Dec 2015 08:59:39 +0000 http://coolcode.ru/?p=5442

В предыдущей статье мы узнали, как находить нужное значение.

Здесь, рассмотрим, как взаимодействовать с сайтом, с помощью Autoit.

Задача следующая, ввести в поле поиска сайта coolcode.ru число 12 и нажать кнопку поиска.

У меня получился вот такой код:

#include <IE.au3>
#include <StringConstants.au3>
Global $Num="12"

Local $oIE = _IECreate("http://www.coolcode.ru",0,1,0,1)
Sleep(2000)
Local $oDiv = _IEGetObjById($oIE, "search")

Local $oInput = _IEGetObjById($oDiv, "s")
_IEAction($oInput, "focus")
Sleep(1000)
_IEFormElementSetValue($oInput,$Num)

Local $oInput = _IEGetObjById($oDiv, "s")
Sleep(1000)
Local $oButton=_IEGetObjById($oDiv, "searchsubmit")
_IEAction($oButton, "focus")
Sleep(1000)
_IEAction($oButton, "click")


;_IEQuit($oIE)

Воспользуемся модулем:

#include <IE.au3>

В предыдущей статье у нас появилась переменная

Global $Num="12"

Уже знакомыми командами открываем IE с сайтом coolcode.ru

Local $oIE = _IECreate("http://www.coolcode.ru",0,1,0,1)
Sleep(2000)

Теперь ищем <div> с id «search»

Local $oDiv = _IEGetObjById($oIE, "search")

 

После выполнения команды в переменной $oDiv Будет находится следующий элемент:

<div id="search">
						<form method="get" id="searchform" action="http://coolcode.ru/">
	<label for="s" class="assistive-text hidden">Поиск</label>
	<input id="s" type="text" name="s" placeholder="Поиск">
	<button id="$Num" name="submit" type="submit">Поиск</button>
</form>					</div>

В этом dive у нас находятся, как поле ввода в которое мы должны ввести 12, так и кнопка, по которой мы должны нажать.

 

Найдём поле ввода

Local $oInput = _IEGetObjById($oDiv, "s")

и кнопку

Local $oButton=_IEGetObjById($oDiv, "searchsubmit")

 

устанавливаем значение поля ввода такое же как и содержание переменной $Num

_IEAction($oInput, "focus")
Sleep(1000)
_IEFormElementSetValue($oInput,$Num)

Здесь есть момент, сначала я устанавливаю фокус на элемент, с которым я хочу взаимодействовать, потом делаю небольшую задержку и назначаю значение в объект.

Это всё сделано, для того что бы это хоть как то было похоже на взаимодействие человека. Многие сайты не любят роботов, а особенно когда те с ними общаются.

 

И последнее нажимаем на кнопку

_IEAction($oButton, "focus")
Sleep(1000)
_IEAction($oButton, "click")

Тоже самое сначала фокус, потом задержка, потом нажимаем на кнопку.

И вуаля… сайт послушно ищет 12.

]]>
https://coolcode.ru/autoit-vzaimodeystvie-s-saytom/feed/ 19
Autoit. Парсинг сайта или забрать значение с сайта. https://coolcode.ru/autoit-parsing-sayta-ili-zabrat-znachenies-sayta/ https://coolcode.ru/autoit-parsing-sayta-ili-zabrat-znachenies-sayta/#comments Tue, 29 Dec 2015 07:50:47 +0000 http://coolcode.ru/?p=5416

 

Парсить чужие сайты — это нудный и не благодарный труд. Обычно для этого продвинутые спамеры и ботоводы используют специальный софт. Например, когда это понадобилось мне я пользовался программой ZennoPoster. Для профессионального использования придётся покупать лицензию. Но для небольших задач, доступна демо версия которая позволяет в процессе тестирования делать небольшие проекты и запускать их, и доступно какой-то период штука для автоматического запуска проектов. Очень много визуального программирования и доступны вставки на языке например C#.

Но если парсить сайты — это лишь небольшая часть скрипта, то можно попытаться обойтись AutoIt.

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

— Скрипт должен выполнятся с правами администратора.

— В зависимости от политик безопасности, возможно сайт придётся занести в доверенную зону.

— Работе скрипта так же может мешать UAC (отключение может помочь)

!!!В 9 строчке (Local $aArray = StringRegExp($oLiHtml,‘( (.*?))’,1)),  в конструкции ‘ \ ((.*?) \ )’ убираем пробелы !!!!

#include <IE.au3>
Local $oIE = _IECreate("http://www.coolcode.ru",0,1,0,1)
Sleep(2000)
Local $oDiv = _IEGetObjById($oIE, "categories-3")
Local $oLis = _IETagNameGetCollection($oDiv, "li")
For $oLi In $oLis
 If StringInStr ($oLi.innerhtml,"Администрирование")>0 Then
  Local $oLiHtml=_IEPropertyGet($oLi,"innerhtml")
  Local $aArray = StringRegExp($oLiHtml,' \ ((.*?) \ )',1)
  Global $Num=$aArray[0]
 EndIf
next
MsgBox(0,"",$Num);
_IEQuit($oIE)

И так рассмотрим проект который на сайте CoolCode.Ru пытается посмотреть сколько статей в разделе  Администрирование.

Воспользуемся модулем:

#include <IE.au3>

 

Запускаем IE с нашим сайтом:

Local $oIE = _IECreate("http://www.coolcode.ru",0,1,0,1)

Параметры по порядку:

«http://www.coolcode.ru» — соответственно url страницы

0 — мы не пытаемся открыть новую вкладку.

1- окно видимо

0 — мы не ожидаем конца загрузки страницы(реклама и социальные кнопки… да ну их)

1 — с делать это окно в фокусе

 

Ждём 2 секунды

Sleep(2000)

это скользкий путь если не важно время выполнения скрипта, то лучше на предыдущей строчке в ожидании конца загрузки поставить 1. Так же для ускорения можно сделать небольшой тюнинг самого IE установить там ADBlock(не забываем выключать на моём сайте, что бы кликать рекламу :)), отключить картинки, убрать CSV, и прочее.

 

Дальше мы из объекта $oIE выцыпляем объект с id = «categories-3»

Local $oDiv = _IEGetObjById($oIE, "categories-3")

Для того, что бы посмотреть код объекта смотрим html страницы, а лучше самого объекта, для этого рекомендую Firefox. Хотя мне хватило Chrome.

Вообще в Autoit нету выцыпления по классу в базовом наборе … прям беда. 🙁

 

И того у нас в объекте $oDiv содержиться примерно такая беда:

Если бы у нас была такая команда

ConsoleWrite($oDiv.Outerhtml)

, то в консоли выдался бы такой текст:

<div class="widget clearfix widget_categories" id="categories-3"><h3 class="heading">Рубрики</h3>		<ul>
	<li class="cat-item cat-item-9"><a href="http://coolcode.ru/admin/">Администрирование</a> (12)
<ul class="children">
	<li class="cat-item cat-item-6"><a href="http://coolcode.ru/admin/scripts/">Скрипты</a> (9)
</li>
</ul>
</li>
	<li class="cat-item cat-item-1"><a href="http://coolcode.ru/bez-rubriki/">Без рубрики</a> (2)
</li>
	<li class="cat-item cat-item-27"><a href="http://coolcode.ru/novosti/">Новости</a> (2)
</li>
	<li class="cat-item cat-item-31"><a href="http://coolcode.ru/reshenie-zadach/">Проверка знаний</a> (862)
</li>
	<li class="cat-item cat-item-24"><a href="http://coolcode.ru/proektyi/">Проекты</a> (1)
</li>
	<li class="cat-item cat-item-21"><a href="http://coolcode.ru/tsiklyi-statey/">Циклы статей.</a> (1)
</li>
	<li class="cat-item cat-item-11"><a href="http://coolcode.ru/programming_languages/">Языки программирования</a> (21)
<ul class="children">
	<li class="cat-item cat-item-12"><a href="http://coolcode.ru/programming_languages/training/">Обучение</a> (17)
	<ul class="children">
	<li class="cat-item cat-item-19"><a href="http://coolcode.ru/programming_languages/training/spravochnaya-informatsiya/">Справочная информация</a> (15)
</li>
	</ul>
</li>
</ul>
</li>
		</ul>
</div>

 

Здесь мы видим список <li> объектов, делаем коллекцию $oLis.

Local $oLis = _IETagNameGetCollection($oDiv, "li")

Бежим по получившейся коллекции:

For $oLi In $oLis
...
next

 

Здесь мы скатились к простому анализу строк, через регулярные выражения:

!!!В 3 строчке (Local $aArray = StringRegExp($oLiHtml,‘( (.*?))’,1)),  в конструкции ‘ \ ((.*?) \ )’ убираем пробелы !!!!

If StringInStr ($oLi.innerhtml,"Администрирование")>0 Then
  Local $oLiHtml=_IEPropertyGet($oLi,"innerhtml")
  Local $aArray = StringRegExp($oLiHtml,' \ ((.*?) \ )',2)
 EndIf

В принципе, если вы профессионал в регулярных выражениях, вы бы могли сразу воспользоваться функцией: _INetGetSource из модуля  Inet.au3 и просто парсить код страницы. Предыдущие манипуляции просто упрощают задачу.

Итак, я немного отвлёкся. В коде мы бежим по li объектам если мы видим что в этом объекте содержится текст Администрирование, то объект правильный.

If StringInStr ($oLi.innerhtml,"Администрирование")>0 Then

Сохраняем его в переменную $oLiHtml значение свойства innerhtml:

Local $oLiHtml=_IEPropertyGet($oLi,"innerhtml")

То-есть код внутри тега.

 

Дальше используем поиск всех значений в скобачках и помещаем их в массив $aArray

!!!Строчка (Local $aArray = StringRegExp($oLiHtml,‘( (.*?))’,1)), пишется без пробелов в конструкции ‘ \ ((.*?) \ )’!!!!

Local $aArray = StringRegExp($oLiHtml,' \ ((.*?) \ )',2)

Дальше запихиваем нужное значение в переменную $Num

Global $Num=$aArray[0]

Здесь я немного упростил себе задачу, не делаю ни каких проверок, что это именно от раздела Администрирования, но это в принципе и не так важно в этом примере.

 

Далее мы выводим результат на экран и закрываем окно.

MsgBox(0,"",$Num);
_IEQuit($oIE)

На этом парсинг сайта закончен.

Ну и немного модефицировав код, мы можем получить индекс Доу-Джонса с сайта yahoo

#include <IE.au3>
Local $oIE = _IECreate("https://beta.finance.yahoo.com/quote/%5EDJI/news",0,0,1,1)
;Sleep(10000)
Local $oLis = _IETagNameGetCollection($oIE, "span")
For $oLi In $oLis
 If StringInStr ($oLi.outerhtml,'class="quote-price"')>0 Then
   Local $oLiHtml=_IEPropertyGet($oLi,"innerhtml")
  Global $Num=$oLiHtml
 EndIf
next
_IEQuit($oIE)
MsgBox(0,"",$Num);

Статья про взаимодействием сайта и AutoIt

Спасибо Юрию за комментарий, о устранении возможных ошибок.

]]>
https://coolcode.ru/autoit-parsing-sayta-ili-zabrat-znachenies-sayta/feed/ 11
Поиск групп по шаблону с консоли. Power Shell https://coolcode.ru/poisk-grupp-po-shablonu-s-konsoli-power-shell/ https://coolcode.ru/poisk-grupp-po-shablonu-s-konsoli-power-shell/#respond Sat, 19 Sep 2015 03:53:15 +0000 http://coolcode.ru/?p=3582

Мне часто приходиться искать множество групп по шаблону. Реализация данной функции в консоли AD меня расстроила и поэтому я держу открытой консоль.

Суть такова, я подключаюсь к серверу, на котором установлен модуль ActiveDirectory. и в цикле запрашиваю с консоли ввод шаблона и выдаю результаты по нему.

$domainController = "AD1.test.local"

invoke-command -computername $domainController -scriptblock { Import-Module ActiveDirectory; $str=""; While ($str -ne "exit") {if ($str -ne "" ){get-adgroup -filter 'SamAccountName -like $str' |ft DistinguishedName}; $str = Read-Host  "Введите шаблон группы";}}

Немного описания данного скрипта:

$domainController = "AD1.test.local"

Здесь задаётся имя сервера с установленным модулем ActiveDirectory. В моём случае это сервер «AD1» в домене «test.local». (что уж там таить контроллер домена).

invoke-command -computername $domainController -scriptblock {..}

Подключаемся к серверу и выполняем на нём scriptblock который находится в фигурных скобочках : {}

А скрипт вот такой:

Import-Module ActiveDirectory;
$str="";
While ($str -ne "exit") {
 if ($str -ne "" ){
   get-adgroup -filter 'SamAccountName -like $str' |ft DistinguishedName
 }; 

   $str = Read-Host  "Введите шаблон группы";
 }

 

Import-Module ActiveDirectory;

Загружаем модуль Active Directory;

$str="";

Объявляем пустую текстовую переменную.

While ($str -ne "exit") {...}

Дальше запускаем цикл он будет идти, пока переменная $str не будет равняться  «exit» (тк. эта переменная будет брать значение из консоли то если написать в консоли слово exit то скрипт завершится)

if ($str -ne "" ){...}

Если строка не пустая, то пытаемся найти группу

get-adgroup -filter 'SamAccountName -like $str'

соответственно передаём по контейнеру группы которые удовлетворяют шаблону,

ft DistinguishedName

Выводим табличкой одно поле DistinguishedName получается просто список групп без лишних буковок  в начале,как например при fl.

 

$str = Read-Host  "Введите шаблон группы";

запрашиваем с консоли ввести группу.

]]>
https://coolcode.ru/poisk-grupp-po-shablonu-s-konsoli-power-shell/feed/ 0
Обновляемся до PowerShell 4.0 https://coolcode.ru/obnovlyaemsya-do-powershell-4-0/ https://coolcode.ru/obnovlyaemsya-do-powershell-4-0/#respond Thu, 13 Aug 2015 13:41:59 +0000 http://coolcode.ru/?p=3419

Для обновления PowerShell до версии 4.0, нам нужно обновить Windows Management Framework до версии 4.0.

Установка пакета.

Скачать пакет обновления, можно с официального сайта Microsoft здесь.

Нажимаем большую красную кнопку «скачать», и выбираем, для какой версии Windows необходимо закачать обновление. При этом не забываем, что Windows 7 и Windows Server 2008 обозначаются как Windows 6.1.

Запускаем полученный msu, соглашаемся с перезагрузкой. И у нас уже установлен PowerShell 4.0. Что бы убедиться в этом, посмотрим текущую версию PowerShell просто заглянув в переменную «$PSVersionTable» :

PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2


PS C:\>

 

Обновление справки.

Не забываем обновить справку, для текущей версии PowerShell

update-help

 

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

И в окне PowerShell, запущенного от администратора, выполнить команду:

Save-Help -DestinationPath E:\Help -Module * -Force

Где E:\ например flash накопитель. После этого в папке E:\Help создадутся файлы с типами «cab» и «xml».

Переносим их на другой компьютер и выполняем команду, так же от имени администратора:

Update-Help -SourcePath E:\Help -Module * -Force

Где E:\Help папка с файлами полученная на предыдущем шаге.

 

Либо можно попробовать использовать текущие настройки прокси:

$c = Get-Credential
$web = New-Object System.Net.WebClient
$web.Proxy.Credentials = $c
update-help -force

 

]]>
https://coolcode.ru/obnovlyaemsya-do-powershell-4-0/feed/ 0
SDN: революция или эволюция? Семинар в Яндексе https://coolcode.ru/sdn-revolyutsiya-ili-evolyutsiya-seminar-v-yandekse/ https://coolcode.ru/sdn-revolyutsiya-ili-evolyutsiya-seminar-v-yandekse/#respond Mon, 23 Jun 2014 04:02:07 +0000 http://coolcode.ru/?p=1887

Привет, меня зовут Даниил Гинсбург, я работаю в Яндексе сетевым архитектором.

В своем докладе я попытался дать свое определение понятия Software-defined Network, которое сегодня понимается в индустрии как чрезмерно широко, так и чрезмерно узко. Мой рассказ также затронул исторические корни SDN, его будущее и вопросы практического развертывания.

Для начала попытаемся ответить на вопрос, все ли у нас хорошо в сетях? Может быть, нам и переделывать ничего не надо? Я уверен, что это не так, и сейчас попытаюсь обосновать свою точку зрения.

slide-2-638

SDN: революция или эволюция? Семинар в Яндексе
Сетевое оборудование, Сетевые технологии*, Блог компании Яндекс
Привет, меня зовут Даниил Гинсбург, я работаю в Яндексе сетевым архитектором.

slide-3-638

В своем докладе я попытался дать свое определение понятия Software-defined Network, которое сегодня понимается в индустрии как чрезмерно широко, так и чрезмерно узко. Мой рассказ также затронул исторические корни SDN, его будущее и вопросы практического развертывания.

slide-4-638

Для начала попытаемся ответить на вопрос, все ли у нас хорошо в сетях? Может быть, нам и переделывать ничего не надо? Я уверен, что это не так, и сейчас попытаюсь обосновать свою точку зрения.

slide-5-638

Сложность

Что же сейчас не так в сетевом мире? Первое, что нас убивает – это сложность. Наши сетевые решения, наши сети сложны. Сложность нам мешает масштабироваться, управлять сетями, делает их хрупкими. Сложность – наш враг. Передача полезного трафика (data-plane устроена сложно. Data-plane наших железок умеет кучу всего: форвардить миллионы инкапсуляций, делать миллион разных тоннелей (причем, мы продолжаем изобретать новые). Есть люди, которые строят из этого абсолютно ужасные конструкции.

Например, гоняют multicast через IRB, который торчит в VPLS, под которым лежат link aggregation groups. Такую штуку невозможно масштабировать, невозможно отлаживать. И стоит это дорого, дорого и в плане железа, и в плане рабочего времени.

Всем этим богатством возможностей data-plane нужно как-то управлять. А раз все это хозяйство такое сложное, то и управлять им сложно.

Мы строим дикие бутерброды из протоколов, и наши протоколы управления развиваются сиюминутно.

Мой любимый (хоть и не самый вопиющий) пример сиюминутности – это Multiprotocol BGP. Для того чтобы анонсировать маршрут по нему, next hop в этом анонсе должен иметь ту же самую address family (v4, v6 или что-то еще). Когда мы хотим v4-маршрут c v6 next hop, мы начинаем придумывать новые RFC. Соответственно, у нас есть n NLRI, то потенциально появляется n2 RFC. Это ужасная, ущербная и невыразительная абстракция.

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

Все это обходится очень дорого. Сетевой элемент, который имеет огромную сложность в data-plane и control-plane, в конкретном случае использует, скажем, 5% возможностей, а оплачивается на все 100. И оплачивается не только ценой железки, но и сложностью ПО, которое на ней используется, багами в нем, хрупкостью сети.

Feature velocity

Когда мне нужна новая фича в оборудовании, я прихожу к вендору. Если мне повезет, получу я эту фичу через год, причем преломленную через сознание вендора, который знает «как лучше».

В числе прочего, из-за этого мы имеем крайне затрудненную автоматизацию. Каждый вендор изобретает свой способ автоматической конфигурации. Если у меня появляется новый вендор, мне нужно модифицировать всю систему управления и автоматизации. Не с нуля, конечно, но значительно.

slide-6-638

Что с этим делать

Очевидно, что нужно с этим всем что-то делать. Например, переделать вообще все и назвать это SDN.

slide-7-638

Точного определения этому термину я дать не могу, никто не может. Некоторые связывают его с инициативой OpenFlow, некоторые употребляют его просто как прилагательное в синонимическом ряду «хороший», «модный», «современный».

slide-8-638

Так что же такое SDN? Это нечто, которое даст нам удобные абстракции. Они будут простыми, понятными естественными, выразительными и полными. Это позволит реализовывать необходимые функции сети самостоятельно, а не ждать, когда вендор сделает это. Естественно, упростится и автоматизация.

slide-10-638

Во-первых, разделить прохождение трафика (data-plane) и сигнализацию/управление (control plane). Во-вторых, сделать элементы data-plane максимально простыми и, в-третьих, централизовать control-plane. Это все позволит быстро и просто реализовывать удобные абстракции в control-plane независимо от data-plane.

 

Теперь разберем все эти идеи по порядку.

Разделение data-plane и control-plane

Первый вопрос, который возникает в связи с разделением data-plane и control-plane – насколько их нужно разделить?

slide-11-638

Это далеко не новая идея, это делали или пытались делать уже много раз. Так, например, устроен любой современный маршрутизатор. Есть элементы data-plane: форвардинговые движки, которые принимают пакеты и решают, куда их форвардить, есть соединяющая их матрица коммутации. Модуль управления существует отдельно. Пользовательский трафик течет насквозь, трафик управления поступает в control engine, который программирует forwarding engine.

slide-12-638

Такой подход позволяет масштабировать отдельный сетевой элемент. С другой стороны такой подход крайне усложняет модель отказов. Такая составная конструкция ломается по частям. Более того, даже data-plane может сломаться частично. Например, если у вас сломалась матрица коммутации, а control engine этого не заметил, весь пользовательский трафик будет просто дропаться. Управленческий трафик будет продолжать ходить, и все будут думать, что наш сетевой элемент жив.

На схеме этого нет, но синий трафик идет через отдельную внутреннюю cеть out-of-band-управления. И эта сеть также может отказать. Если мы возьмем и разделим data-plane и control-plane не в рамках одного сетевого элемента, а в рамках всей сети, то cеть out-of-band-управления станет столь же сложной, что и наш data-plane. Соответственно, ломаться она станет так же часто и плохо, как и основная сеть.

Возникает также вопрос, а как же управлять управляющей сетью, если она столь же сложна, что и сеть, передающая полезный трафик?

slide-13-638

Упрощение элементов сети

Перейдем к идее упрощения элементов data-plane. Мы должны придумать достаточно простую и общую абстракцию для управления сетевым элементом. Простую, понятную, достаточно гибкую и выразительную.

slide-14-638

Насколько простой должна быть эта абстракция? Если не вдаваться глубоко в детали, data-plane выглядит следующим образом: к нам приходит пакет, мы берем поля из заголовка делаем lookup в таблице форвардинга, модифицируем заголовки пакета и отправляем в следующий интерфейс.

Реальность несколько сложнее. Вот так выглядит сильно упрощенная схема того, что происходит в одном чипе сетевого элемента:

slide-15-638

slide-16-638

Какую абстракцию элементов data-plane нам предлагает OpenFlow? У нас есть поля, есть таблица лукапов, мы делаем поиск, определяем, что нужно сделать и воплощаем это. Все предельно просто.

slide-17-638

Одна из проблем с абстракцией в OpenFlow 1.0 – это комбинаторный взрыв. Для примера возьмем простую искуственную задачу. Нам нужно пропускать трафик на N хостов на одни и те же M TCP-портов, а остальной трафик сбрасывать. В OpenFlow 1.0 для этого нам потребуется NxM записей, придется перечислить все комбинации хост-порт. Масштабировать это не получится.

slide-18-638

В OpenFlow 1.1 и всех последующих версиях появляется идея множественных таблиц. Это избавляет от комбинаторного взрыва. Идея сравнительно элегантная, но у нее есть проблема, она плохо отражается на железе. Дело в том, что железо, которое стоит разумных денег, не умеет делать лукапы в произвольном порядке.

slide-19-638

В современном железе есть возможность делать многостадийную обработку. Находим в таблице соответствующую запись, а дальше проводим несколько стадий обработки: добавляем метку, перезаписываем заголовок, потом еще что-нибудь и т.д. Называется это indirect next hops: один next hop в этом случае ссылается на другой по индексу таблицы. Т.е. находить следующий просто. Однако, в конструкции с множественными таблицами у нас нет непосредственных ссылок, и мы вынужденны будем делать multifield lookup несколько раз, а это достаточно затратно. Однако от комбинаторного взрыва мы избавляемся и та же задача с N хостов и M портов решается гораздо проще: у на будет две таблицы: N записей в одной и M записей в другой.

slide-20-638

В рамках организации Open Networking Foundation, которая разрабатывает и стандартизирует OpenFlow, работает Forwarding Abstractions working group (FAWG). Разрабатываемая этой группой идея заключается в том, чтобы опрашивать сетевые элементы о том, какую последовательность лукапов они могут сделать. Т.е. когда контроллер делает запрос, сетевой элемент предоставляет ему информацию обо всем том чудовищном пайплайне, который представлен на предыдущей картинке.

Но куда же делась абстракция?

slide-21-638

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

slide-22-638

Централизация и децентрализация

Попробуем определить, насколько централизованным должен быть control-plane. Тут есть пространство для маневра. Централизация и децентрализация – процесс колебательный.

slide-23-638

Те, кто достаточно давно работают в индустрии, скорее всего, со мной согласятся. Один из примеров, d котором мы уже прошли несколько циклов. Мы покупаем BRAS и ставим его в середине. Понимаем, что у нас ничего не масштабируется, растащим его по краям. Теперь теряется управление, снова возвращаемся к централизации, покупаем BRAS побольше и ставим его в середину. И так далее.

slide-24-638

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

slide-25-638

Что нам в этом плане предлагают радикалы от OpenFlow-подхода? Предполагается, что сам сетевой элемент крайне туп и неспособен ни как каким самостоятельным действиям, что ему контроллер говорит, то он и делает.

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

slide-26-638

Так что же делать на самом деле?

Главное – это умерить революционный пыл и подойти к SDN с эволюционной точки зрения.

slide-27-638

Все то, что нам обещает SDN, все то, о чем мы говорили в начале – действительно хорошо. Это то, к чему нам нужно стремиться. Мы должны приложить все усилия, чтобы эти обещания сбылись.

slide-28-638

Так что же нам для этого нужно сделать?

Во-первых, стандартизировать один механизм data-plane. Для управления всем разнообразием протоколов, конструкций и механизмов, которые есть в сегодняшнем data-plane, нет никакого разумного способа.

Во-вторых, нужно выбрать правильную абстракцию элемента, которая была бы простой и в тоже время гибкой. Кроме того, нужно обеспечить возможность реализовывать сетевые функции как централизованно, так и децентрализованно. Также нужно найти способ комбинирования по-разному реализованных функций.

slide-29-638

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

И в то же время существуют децентрализованные по своей природе функции, например, перемаршрутизация при сбоях. Кроме того, есть функции, которые можно реализовывать так, как это выгодно здесь и сейчас. К таким функциям можно отнести вычисление пути. Например, внутри дата-центра у меня нет никакой потребности делать traffic-engineering, там просто нет необходимости экономить полосу. А вот в WAN уже может потребоваться traffic-engineering, и его можно и иногда нужно делать централизованно.

slide-30-638

Сеть может иметь доменную структуру: например, DC и WAN, access и core, RAN и blcackhaul. Разные части сети выполняют различные функции, они устроены по-разному, и подходят им разные типы управления. Соответственно, чтобы сеть была единой, разные части сети нужно «сшивать» и «накладывать» друг на друга.

slide-31-638slide-32-638slide-33-638slide-34-638

Поверх доменов мы можем сделать транспорты, а поверх этих транспортов – «сервисы».

slide-35-638

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

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

Один из многообещающих подходов – это i2rs от IETF. Это несколько более высокоуровневая модель, чем предлагаемый OpenFlow. Например, i2rs оперирует не записями в таблице форвардинга, а понятием маршрута.

slide-36-638

Где мы сейчас

Что технический прогресс позволяет нам сделать сегодня и в самое ближайшее время?slide-37-638

На сегодня есть два самых актуальных применения SDN: сетевая виртуализация и сцепление сервисов. Мы должны понимать, что у нас есть уровень виртуализации и уровень транспорта, задача которого заключается в том, чтобы перетаскивать пакеты.

slide-38-638

В качестве транспорта у нас есть IP/MPLS. Мы умеем делать простую MPLS-сеть, делать транспорт.

95% сложности MPLS control-plane сосредоточена в организации сервисов. Именно здесь должны быть сосредоточены усилия.

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

Такая сеть должна управляться гибридно: централизованные элементы управления должны быть распределены. Это даст нам возможность брать политики разделения сети и компилировать их в определенные правила гибридных контроллеров, управляющих наложенной сетью.

При этом, каковы бы ни были наши политики, мы не трогаем транспорт. В нем ничего не меняется, он не знает ни про наши политики, ни про наложенную сеть.

slide-39-638

Заключение

slide-40-638

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

slide-41-638 slide-42-638 slide-43-638 slide-44-638 slide-45-638

Взято с блога компании яндекс.

]]>
https://coolcode.ru/sdn-revolyutsiya-ili-evolyutsiya-seminar-v-yandekse/feed/ 0
Раздача прав на NTFS из PowerShell. https://coolcode.ru/razdacha-prav-na-ntfs-iz-powershell/ https://coolcode.ru/razdacha-prav-na-ntfs-iz-powershell/#comments Fri, 30 May 2014 07:21:54 +0000 http://coolcode.ru/?p=1786

В NTFS для внутреннего разграничения доступа к данным используется список контроля доступа — Access Control List или ACL.

Для манипуляции с ACL в PowerShell есть два комадлета Get-ACL и Set-Acl, для получения и записи ACL объектов соответственно. Get-ACL  получает объект типа System.Security.AccessControl.DirectorySecurity или System.Security.AccessControl.FileSecurity в зависимости от того на какой тип ресурса он будет применён.

Рассмотрим следующий пример изменения прав на существующей папке «D:\test».

$acl = Get-ACL -Path "D:\test"
$Rule=new-object System.Security.AccessControl.FileSystemAccessRule "LocalComputer\Test","Read,Delete","ContainerInherit", "None","allow"
$acl.AddAccessRule($Rule)
Set-Acl -Path "D:\test" -AclObject $acl

Get-ACL

$acl = Get-ACL -Path "D:\test"

Здесь переменной $acl мы присваиваем значение acl таблицы папки «D:\test». При этом параметр -Path можно опустить и запись будет выглядеть так:

$acl = Get-ACL "D:\test"

 

AddAccessRule

$Rule=new-object System.Security.AccessControl.FileSystemAccessRule "LocalComputer\Test","Read,Delete","ContainerInherit", "None","allow"
$acl.AddAccessRule($Rule)

Для того, что бы добавить права в нашу ACL сначала надо их обозначить, для этого создадим ещё одну переменную $Rule с типом System.Security.AccessControl.FileSystemAccessRule сразу, при создании объявим необходимые нам параметры:

1) с начала задаём имя пользователя или группы. В нашем примере «LocalComputer» это имя локального компьютера, вместо него можно указать ваш домен. «Test» — имя пользователя в место него можно указать имя группы.

2)  Дальше идёт уровень предоставляемого доступа и может принимать следующие параметры:

Уровень доступа Значение параметра
Чтение Read
Запись Write
Изменение Modify
Полный доступ FullControl
Траверс / выполнение файлов ExecuteFile
Содержание папки/чтение данных ReadData
Чтение атрибутов ReadAttributes
Чтение дополнительных атрибутов ReadExtendedAttributes
Создание файлов/запись данных CreateFiles
Создание папок /дозапись данных AppendData
Запись атрибутов WriteAttributes
Запись дополнительных атрибутов WriteExtendedAttributes
Удаление подпапок и файлов DeleteSubdirectoriesAndFiles
Удаление Delete
Чтение разрешений ReadPermissions
Смена разрешений ChangePermissions
Смена владельца TakeOwnership

При этом параметры Read, Write, Modify и FullControl это Общие разрешения, которые содержат дополнительные разрешения:

Read
Уровень доступа Значение параметра
Содержание папки/чтение данных ReadData
Чтение атрибутов ReadAttributes
Чтение дополнительных атрибутов ReadExtendedAttributes
Чтение разрешений ReadPermissions
Write
Уровень доступа Значение параметра
Создание файлов/запись данных CreateFiles
Создание папок /дозапись данных AppendData
Запись атрибутов WriteAttributes
Запись дополнительных атрибутов WriteExtendedAttributes
Чтение и выполнение/Список содержимого папки ReadAndExecute
Траверс / выполнение файлов ExecuteFile
Содержание папки/чтение данных ReadData
Чтение атрибутов ReadAttributes
Чтение дополнительных атрибутов ReadExtendedAttributes
Чтение разрешений ReadPermissions
Modify
Уровень доступа Значение параметра
Траверс / выполнение файлов ExecuteFile
Содержание папки/чтение данных ReadData
Чтение атрибутов ReadAttributes
Чтение дополнительных атрибутов ReadExtendedAttributes
Создание файлов/запись данных CreateFiles
Создание папок /дозапись данных AppendData
Запись атрибутов WriteAttributes
Запись дополнительных атрибутов WriteExtendedAttributes
Удаление Delete
Чтение разрешений ReadPermissions
FullControl
Уровень доступа Значение параметра
Траверс / выполнение файлов ExecuteFile
Содержание папки/чтение данных ReadData
Чтение атрибутов ReadAttributes
Чтение дополнительных атрибутов ReadExtendedAttributes
Создание файлов/запись данных CreateFiles
Создание папок /дозапись данных AppendData
Запись атрибутов WriteAttributes
Запись дополнительных атрибутов WriteExtendedAttributes
Удаление подпапок и файлов DeleteSubdirectoriesAndFiles
Удаление Delete
Чтение разрешений ReadPermissions
Смена разрешений ChangePermissions
Смена владельца TakeOwnership

В нашем случае права состоят из основного параметра Read и дополнительного  Delete.

3) Дальше идут два параметра наследования, можно использовать  следующие сочитания:

Параметр1,Параметр2 Описание
#171;#187;»None»»»,»None» Права применяются только для этой папки.
#171;#187;»ContainerInherit»»»,»None» Права применяются для этой папки и её подпапок
#171;#187;»ObjectInherit»»»,»None» Права применяются для этой папки и её файлов
#171;#187;»ContainerInherit,ObjectInherit»»»,»None»  Права применяются для этой папки её подпапок и файлов
#171;#187;»ContainerInherit»»», «InheritOnly» Права применяются только для подпапок
#171;#187;»ObjectInherit»»», «InheritOnly» Права применяются только для файлов
#171;#187;»ContainerInherit,ObjectInherit»»», «InheritOnly» Права применяются только для подпапок и файлов

Так же работают и другие сочитания данных параметров. По отдельности они значат следующее:

Первый параметр:

Параметр    Описание
ContainerInherit   Элемент управления доступом наследуется дочерними объектами-контейнерами.
None    Элемент управления доступом не наследуется дочерними объектами.
ObjectInherit    Элемент управления доступом наследуется дочерними конечными объектами.

Второй параметр:

Параметр    Описание
InheritOnly    Указывает, что элемент управления доступом распространяется только на дочерние объекты. К ним относятся контейнеры и конечные дочерние объекты.
None    Указывает, что флаги наследования не установлены.
NoPropagateInherit    Указывает, что элемент управления доступом не распространяется на дочерние объекты.

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

Параметр Описание
Allow Правило разрешает доступ к объекту
Deny Правило запрещает доступ к объекту

 

После того,  как правило создано, мы можем добавить его к acl с помощью свойства AddAccessRule :

$acl.AddAccessRule($Rule)

 

Set-Acl

Set-Acl -Path "D:\test" -AclObject $acl

Теперь мы можем назначить наш объект acl обратно на ресурс. Это мы делаем с помощью командлета Set-Acl если опустить параметры Path и AclObject данная запись будет выглядеть так:

Set-Acl "D:\test" $acl

 

]]>
https://coolcode.ru/razdacha-prav-na-ntfs-iz-powershell/feed/ 10
Строки в PowerShell https://coolcode.ru/stroki-v-powershell/ https://coolcode.ru/stroki-v-powershell/#comments Mon, 28 Apr 2014 07:19:34 +0000 http://coolcode.ru/?p=750

Результатом выполнения команда в PowerShell являются объекты. Поэтому работ со строками сильно по уменьшилось. Но иногда приходится обрабатывать и текст.

Начнём с того, что получить строку в PowerShell довольно легко. Так например что бы получить и вывести строку: «Hello World!». Надо выполнить следующую команду:

"Hello World!"

Строки Нумирация символов в строке начинается с нулевого символа.  Максимальная длина строки в PowerShell зависит от характеристики компьютера. Так на XP она состовляет с 4 гигами оперативной памяти она составляет 151.001.191 символ, а на 8.1 с 8 Гб оперативной памяти до 1.073.741.791 символов.

Обратится к конкретному символу строки можно по следующему шаблону:

(строка) [номер символа]

Например результатом команды :

"Hello World!"[6]

Будет символ W, это седьмой символ в строке, но нумерация начинается с нуля.

Так же можно воспользоваться методом Chars, указав в его параметре номер символа. Синтаксис данного метода:

[строка].Chars([номер символа])

Пример:

«Hello World!».Chars(6)

Результатом данной команды будет так же символ W.

Что бы присвоить переменной значение , надо воспользоваться оператором =

Пример:

$a ="Hello"

$a

В результате на консоль будет выведена строка «Hello»

Так же можно склеивать строки с помощью оператора +

Например:

$a =$a+" World!"

$a

или

$a += " World!"

$a

В результате на консоле будет выведена строка «Hello World!»

Так же со строками можно применять операторы сравнения, такие как

«-eq» — (=) проверяет равны ли строки между собой

«-ne» — (≠) обратный оператору -eq проверяет неравенство строк

«-gt» — (>) больше ли одна строка чем другая

«-lt» — (<) меньше ли одна строка чем другая

«-le» — (≤) меньше или равна одна строка чем другая

«-ge» — (≥) больше или равна одна строка чем другая

Самым часто используемым оператором среди них это «-eq». Пример:

"Hello World!" -eq  "Hello World!"

Результат будет True, так как строки идентичны.

Операторы же -gt, -lt, -le, -ge по сути могут помочь определить начинается ли данная строка подстрокой, пример:

Например так:

"Hello World!" -gt  "Hello"

Результатом будет True. Однако логичнее для этого использовать метод самой строки StartsWith о нём написано ниже.

Так же есть методы сравнения -like и -match

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

"Hello World!" -Like  "Hello*!"

Результатом будет : True

Оператор -match использует регулярные выражения .NET. Что существенно увеличивает возможности данного метода.

Предыдущий пример мог бы выглядеть например так:

"Hello World!" -match  "Hello[\D]*!"

Результатом будет : True

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

$a = get-help Get-Help -detailed

$a -match "http://.*/"

$matches[0].split(";")

Результатом выполнения данного скрипта будет следующий набор строк: @(«http://schemas.microsoft.com/maml/2004/10», «xmlns:command=http://schemas.microsoft.com/maml/dev/command/2004/10″,»xmlns:dev=http://schemas.microsoft.com/maml/dev/2004/10″,»xmlns:MSHelp=http://msdn.microsoft.com/»)

Надо отметить утверждение о том, что все объекты в PowerShell являются объектами и строки тоже не являются исключениями.

Рассмотрим методы которые можно применить, для строк:

"Hello World!" | gm

 

Clone — копия объекта.

Результатом метода будет точная копия данного объекта.

Его синтаксис: [String]=[Строка].Clone()

Например результатом данной команды:

("Hello World!").Clone()

Будет строка «Hello World!».

 

CompareTo — сравнение двух строк

Вызывается он [int]= [1 строка].CompareTo([2 строка])

Результат данного метода 0 — тогда строки совпадают. Могут ещё быть -1 и 1.

-1 означает, что строка 1 меньше строки 2.

1 означет, что строка 1 больше строки 2

Например результатом данного выражения:

("Hello World!").CompareTo("Hello");

будет 1, а выражения

("Hello World!").CompareTo("hello world!");

будет -1.

Что бы сравнить две строки без учёта регистра, то надо воспользоваться методом .NET:

[string]::Compare([строка 1], [строка 2], [игнорировать ли регистр])

Сравним им строчки «Hello World!» и «hello world!»

[string]::Compare("Hello World!","hello world!",$True)

Результатом будет 0, то есть две строки равны.

 

Contains — Нахождение подстроки

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

синтаксис метода такой:

[bool] = [строка 1].Contains([строка 2])

Результатом данного метода будет булевое значение, которое будет равно 0 если строка 2 будет являтся подстрокой строки 1.

Рассмотрим пример:

("Hello World!").Contains("World")

результатом данного выражение будет значение «True». Однако данный метод чувствителен к регистру.

 

 

EndsWith — Заканчивается ли строка подстрокой

Синтаксис данного метода [bool] = [строка 1].EndsWith([строка 2])

Данный метод определит, заканчивается ли строка 1  — строкой 2.

например:

("Hello World!").EndsWith("World!")

Результат True

 

StartsWith — начинается ли строка с подстроки

Синтаксис данного метода [bool] = [строка 1].StartsWith([строка 2])

Аналогично EndsWith  данный метод определит начинается ли строка 1 со строки 2.

Пример:

("Hello World!").StartsWith("Hello")

Результат True

 

Equals — сравнение двух строк

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

[bool] = [строка 1].Equals([строка 2])

Пример:

("Hello World!").Equals("Hello World!")

Результатом данной операции будет True

Однако это удобнее записать так:

"Hello World!" -Eq "Hello World!"

 

GetHashCode- получить Hash Code строки

Синтаксис этого метода:

[int] = [строка 1].GetHashCode()

Результатом выполнения Метода, на строке «Hello World!» :

("Hello World!").GetHashCode()

Будет: «-1989043627»

 

 

IndexOf — индекс начала вхождения подстроки.

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

Синтаксис:

[int] = [строка 1].IndexOf([строка 2])

Рассмотрим пример:

("Hello World!").IndexOf("World")

Результатом выполнения данного скрипта, будет  «6». Так как нумерация строки начинается с нулевого символа.

 

LastIndexOf — Последнее вхождение подстроки

В отличии от IndexOf показывает не первое значение входа подстраки а последнее , синтаксис этого метода:

[int]=[строка 1].LastIndexOf([строка 2])

Рассмотрим пример:

("Hello World!").LastIndexOf("o")

Результатом будет значение 7.

 

IndexOfAny — первое вхождение любого символа из подстроки в строке.

Синтаксис:

[int] = [строка 1].IndexOfAny([строка 2])

Данный метод позволит получить первое вхождение любого символа из строки 2 в строке 1

Рассмотрим пример:

("Hello World!").IndexOfAny("World")

Результатом будет 2, так как l присутствует и в слове World

 

LastIndexOfAny  — последнне вхождение любого символа из подстроки в строке.

Синтаксис:

[int] = [строка 1].LastIndexOfAny([строка 2])

Анологично IndexOfAny ищет значение входа символов подстроки в строке, но выводит не первое вхождение, а последнее

Пример:

(«Hello World!»).LastIndexOfAny(«World»)

результатом данной команды будет 10, и это символ «d «.

 

Insert — Вставить в строку, подстроку.

Синтаксис:

[String]= [строка 1].Insert([Номер символа],[строка 2])

Результатом данного метода будет строка содержащая строку 2 начиная с символа «Номер символа»

Пример:

("Hello World!").Insert(11," of Warcraft")

Результатом выполнения данного скрипта будет строка : «Hello World of Warcraft!»

 

PadLeft — дополнить строку символами с лева

Что бы дополнить строку до определённого кол-ва символов. Если мы хотим, что бы символы дополнялись с лева, можно воспользоваться командой PadLeft её синтаксис:

[String] =  [строка 1].PadLeft([размер строки],[символ которым заполнять])

Пример:

"Hello World!".PadLeft(20,".")

Результатом данной команды будет строка: «……..Hello World!»

 

PadRight — дополнить строку символами с права

Аналогично, как и PadLeft дополняет строку до указанного размера, символами, добавляя их с права. Синтаксис:

[String] =  [строка 1].PadRight([размер строки],[символ которым заполнять])

Пример:

"Hello World!".PadRight(20,".")

Результат данной команды будет строка : Hello World!……..

 

Remove — позволяет удалять из строки подстроки

Метод Remove перегружен и может использоваться в следующих синтаксисах:

[String] = [строка 1].Remove([кол-во символов])

результатом данной команды будет строка содержащая подстроку начиная с 0 символа строки 1 и заканчивая символом указанному в методе.

Пример:

("Hello World!").Remove(2)

Результатом будет строка: «He»

Если же воспользоваться синтаксисом:

[String] = [строка 1].Remove([начальная позиция],[кол-во символов])

То результатом данной команды будет строка сформированная из строки 1, но в ней не будет содержаться указанное кол-во символов, начиная с начальная позиция.

Пример:

("Hello World!").Remove(4,2)

Результат: «HellWorld!»

 

Substring — позволяет получить подстроку из строки

Метод Substring является кординально противоположный, чем метод Remove

Он так же перегружен и может использоватся в двух вариациях.

[String] = [строка 1].Substring([кол-во символов])

Результатом данной команды будет подстрока образованная из строки 1 путём удаления данное кол-во символов.

Пример:

"Hello World!".Substring(3)

Результатом данной команды будет строка: «lo World!»

Так же существует другой синтаксис:

[String] = [строка 1].Substring([начальная позиция],[кол-во символов])

Тогда результатом данного метода будет подстрока сформированная из строки 1 содержащая указанное кол-во символов и начинающаяся с указанной позиции.

Пример:

"Hello World!".Substring(6,5)

Результатом будет строка «World»

 

Replace — найти подстроку и заменить на свою

Данный метод позволяет заменить все вхождения подстроки в строке, на другую подсроку.

Синтаксис:

[String] = [строка 1].Replace([старая подстрока],[новая подстрока])

Пример:

("Hello World!").Replace("Hello","Goodbye")

Результат «Goodbye World!»

 

Split — разбить строку на массив строк.

Иногда строку легче обрабатывать массивом, для этого есть метод Split. Он позволяет разбить строку на массив подстрок с помощью разделяющего символа или группу символов.

Синтаксис:

[string[] ]= [строка 1].Split([разделяющий символ])

Пример:

("Hello World !").Split(" ")

результатом будет массив строк»Hello»,»World,!»

Если нам нужно указать не один разделитель а несколько, укажите перечисление:

Пример:

"Hello World!".Split(@("o","e"))

Результатом будет массив строк :»H»,»ll»,» W»,»rld!»

Trim, TrimLeft, TrimRight — удаляем одинаковые символы по бокам страницы

Иногда нужно удалить повторяющиеся символы по бокам строки. Очень часто такими символами являются пробелы, для этого существует метор Trim он существует в следующих вариациях Trim, TrimLeft, TrimRight они отличаются областью действия, Trim отбрасывает не нужные символы с двух сторон строки, TrimLeft — только с лева, TrimRight — только с права.

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

[String]=[строка 1].Trim()

[String]=[строка 1].TrimLeft()

[String]=[строка 1].TrimRight()

Пример:

"           Hello World!         ".Trim()

Результатом данной команды будет строка «Hello World!»

Если же мы хотим удалить не пробел, то этот символ надо ввести в параметр метода. Синтаксис:

[String]=[строка 1].Trim([удаляемый символ])

[String]=[строка 1].TrimLeft([удаляемый символ])

[String]=[строка 1].TrimRight([удаляемый символ])

Пример:

".........Hello World!........".Trim(".")

Результатом данной команды будет строка «Hello World!»

 

Свойство Length — позволяет определить размер строки

Что бы посмотреть размер строки, надо воспользоваться свойством Length. Синтаксис:

[int] = [строка].Length

Пример:

"Hello World!".Length

Результатом команды будет число 12

 

Преобразования строк в различные типы

У строки так же имеется ряд методов, которые конвертируют данные из  строки в различные типы. Эти свойства ToBoolean, ToByte, ToChar,  ToCharArray, ToDateTime, ToDecimal, ToDouble, ToInt16, ToInt32, ToInt64, ToLower, ToLowerInvariant, ToSByte, ToSingle, ToString, ToType, ToUInt16, ToUInt32, ToUInt64, ToUpper, ToUpperInvariant

 

GetEnumerator — получить перечисление

Полученить перечисление из строки.

Синтаксис этого метода:

[System.CharEnumerator] = [строка 1].GetEnumerator()

("Hello World!").GetEnumerator()

Результатом данного метода будет перечисление @(‘H’,’e’,’l’,’l’,’o’,’ ‘,’W’,’o’,’r’,’l’,’d’,’!’)

 

GetType — получить тип объекта

Так как мы рассматриваем строки то возращаемый тип строки это String

Синтаксис:[System.RuntimeType] =  [строка 1].GetType()

("Hello World!").GetType()

Результатом будет объект System.RuntimeType со значением типа String

 

GetTypeCode — получить код типа объекта

Получить тип объекта, если мы работаем со строками то тип будет String.

Синтаксис: [System.TypeCode] = [строка 1].GetTypeCode()

("Hello World!").GetTypeCode()

Результатом будет объект типа System.TypeCode со значением String

 

Говоря о строках, нельзя не упомянуть о командлете Select-String данный командлет является достойной альтернативой Grep в Unix он позволяет искать строки используя регулярные выражения .NET. Но рассматривать его лучше вместе с регулярными выражениями.

 

 

]]>
https://coolcode.ru/stroki-v-powershell/feed/ 6