Powershell — Клёвый код https://coolcode.ru Скриптописание и кодинг Mon, 06 Jul 2020 02:07:20 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.8.12 https://coolcode.ru/wp-content/uploads/2015/10/YO1-150x150.png Powershell — Клёвый код https://coolcode.ru 32 32 PowerShell. Get-ADUser https://coolcode.ru/powershell-get-aduser/ https://coolcode.ru/powershell-get-aduser/#respond Sat, 08 Oct 2016 10:12:48 +0000 http://coolcode.ru/?p=10059

ОПИСАНИЕ

Получает одного или нескольких пользователей Active Directory.

 

СИНТАКСИС

Get-ADUser -Filter <string> [-ResultPageSize <int>] [-ResultSetSize <System.Nullable[System.Int32]>] [-SearchBase <string>] [-SearchScope {Base | OneLevel | Subtree}] [-SearchScope {Base | OneLevel | Subtree}] [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <string>] [-Properties <string[]>] [-Server <string>] [<CommonParameters>]

Get-ADUser [-Identity] <ADUser> [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <string>] [-Properties <string[]>] [-Server <string>] [<CommonParameters>]

Get-ADUser -LDAPFilter <string> [-ResultPageSize <int>] [-ResultSetSize <System.Nullable[System.Int32]>] [-SearchBase <string>] [-SearchScope {Base | OneLevel | Subtree}] [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <string>] [-Properties <string[]>] [-Server <string>] [<CommonParameters>]

 

ОПИСАНИЕ

Командлет Get-ADUser получает объект пользователя или выполняет поиск для получения нескольких объектов пользователей.

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

Для поиска и получения нескольких пользователей используйте параметр Filter или LDAPFilter. В параметре Filter для написания строк запросов к Active Directory используется язык выражений PowerShell. Синтаксис языка выражений PowerShell поддерживает широкие возможности преобразования типов для значений, принимаемых параметром Filter. Дополнительные сведения о синтаксисе параметра Filter см. в разделе about_ActiveDirectory_Filter. Если существуют строки запроса LDAP, можно использовать параметр LDAPFilter.

Этот командлет получает набор свойств объекта пользователя, заданный по умолчанию. Чтобы получить дополнительные свойства, используйте параметр Properties. Дополнительные сведения об определении свойств объектов пользователей см. в описании параметра Properties.

 

ПАРАМЕТРЫ

-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

 

-Filter <string>

Задает строку запроса, получающую объекты Active Directory. Эта строка использует синтаксис языка выражений PowerShell. Синтаксис языка выражений PowerShell поддерживает широкие возможности преобразования типов для значений, принимаемых параметром Filter. В синтаксисе используется порядковое представление, что означает, что оператор помещается между операндом и значением. Дополнительные сведения о параметре Filter см. в разделе about_ActiveDirectory_Filter.

Синтаксис:
В следующем синтаксисе демонстрации использования языка выражений PowerShell для данного параметра используется форма Бэкуса-Наура.

<фильтр>::= «{» <список_компонентов_фильтра> «}»

<список_компонентов_фильтра> ::= <компонент_фильтра> | <компонент_фильтра> <оператор_соединения> <компонент_фильтра> | <оператор_Not><компонент_фильтра>

<компонент_фильтра> ::= <атрибут> <оператор_фильтра> <значение> | «(» <компонент_фильтра> «)»

<оператор_фильтра> ::= «-eq» | «-le» | «-ge» | «-ne» | «-lt» | «-gt»| «-approx» | «-bor» | «-band» | «-recursivematch» | «-like» | «-notlike»

<оператор_соединения> ::= «-and» | «-or»

<оператор_Not> ::= «-not»

<атрибут> ::= <имя_свойства> | <параметр LDAPDisplayName атрибута>

<значение>::= <сравнить это значение с атрибутом <атрибут> с помощью заданного оператора фильтра <оператор_фильтра>>

Список поддерживаемых типов для значения <значение> см. в разделе ActiveDirectory_ObjectModel.

Примеры

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

Чтобы получить все объекты типа, указанного с помощью командлета, используйте подстановочный знак «звездочка».
Объекты всех пользователей:

Get-ADUser -Filter *

-или-
Объекты всех компьютеров:

Get-ADComputer -Filter *

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

Get-ADUser -Filter {EmailAddress -like "*"}

,

Get-ADUser -Filter {mail -like "*"}

-или-

Get-ADObject -Filter {(mail -like "*") -and (ObjectClass -eq "user")}

Примечание. Подстановочные знаки PowerShell, отличные от «*», например «?», не поддерживаются синтаксисом параметра Filter.

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

Get-ADUser -filter {(EmailAddress -like "*") -and (Surname-eq "korepin")}

-или-

Get-ADUser -filter {(mail -eq "*") -and (sn -eq "Korepin")}

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

$logonDate = New-Object System.DateTime(2007, 1, 1)
Get-ADUser-filter { lastLogon -le $logonDate}

Чтобы получить все группы, для которых категория имеет значение Security, а область — Global, воспользуйтесь одной из следующих команд:

Get-ADGroup-filter {GroupCategory-eq "Security"-and GroupScope -eq "Global"}

-или-

Get-ADGroup -filter {GroupType -band 0x80000000}

Примечание. Чтобы сформировать запрос с использованием строк запроса LDAP, используйте параметр LDAPFilter.

Необходимость парaметров Обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера 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

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

 

-LDAPFilter <string>

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

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

-LDAPFilter "(name=inna*)"-SearchScope Subtree -SearchBase "DC=NA,DC=fabrikam,DC=com"

Необходимость парaметров Обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера 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

 

-Properties <string[]>

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

Задайте свойства этого параметра в виде разделенного запятыми списка имен. Чтобы отобразить все заданные для объекта атрибуты, укажите звездочку (*).

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

Чтобы получить и отобразить свойства объекта, можно воспользоваться связанным с объектом командлетом Get-* и передать результаты его выполнения в командлет Get-Member. В следующих примерах показано, как получить свойства группы на примере объекта группы «Администраторы».

Get-ADGroup -Identity Administrators | Get-Member

Чтобы получить и отобразить список всех свойств объекта ADGroup, воспользуйтесь следующей командой:

Get-ADGroup -Identity Administrators -Properties *| Get-Member

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

Чтобы для объекта ADUser с именем «InnaOzhogina» получить расширенные свойства «OfficePhone» и «Organization», а также свойства по умолчанию, воспользуйтесь следующей командой:

GetADUser -Identity InnaOzhogina-Properties OfficePhone,Organization

Чтобы помимо свойств по умолчанию для данного пользователя получить еще и свойства с отображаемыми именами LDAP «otherTelephone» и «otherMobile», воспользуйтесь следующей командой:

GetADUser -Identity InnaOzhogina-Properties otherTelephone, otherMobile |Get-Member

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

 

-ResultPageSize <int>

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

По умолчанию количество объектов на одной странице составляет 256.

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

-ResultPageSize 500

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

 

-ResultSetSize <System.Nullable[System.Int32]>

Задает максимальное количество объектов, возвращаемых запросом к доменным службам Active Directory. Если требуется получать все объекты, установите для данного параметра значение $null (неопределенное значение). С помощью сочетания клавиш CTRL+C можно остановить обработку запроса (при этом произойдет возврат объектов). По умолчанию используется значение $null.
В следующем примере показано, как задать этот параметр так, чтобы получать все возвращаемые объекты.

-ResultSetSize $null

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

 

-SearchBase <string>

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

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

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

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

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

-SearchBase "ou=mfg,dc=noam,dc=corp,dc=contoso,dc=com"

Если в качестве значения параметра SearchBase указана пустая строка и имеется подключение к порту GC, выполняется поиск по всем разделам. Если в качестве значения параметра SearchBase указана пустая строка и отсутствует подключение к порту GC, будет возвращена ошибка.
В следующем примере показано, как присвоить этому параметру пустую строку.-SearchBase «»

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

 

-SearchScope <ADSearchScope>

Задает область поиска по Active Directory. Возможные значения параметра:
Base или 0
OneLevel или 1
Subtree или 2

Основной запрос (типа «Base») выполняет поиск только по текущему пути или в текущем объекте. Одноуровневый запрос (типа «OneLevel») выполняет поиск в непосредственных дочерних элементах этого пути или объекта. Запрос по поддереву (типа «Subtree») выполняет поиск по текущему пути или в текущем объекте и во всех дочерних элементах этого пути или объекта.

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

-SearchScope Subtree

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

Base

OneLevel

Subtree

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию Subtree
Принимать входные данные конвейера 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.ADUser
Объект пользователя занесен в параметр Identity.

 

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

Microsoft.ActiveDirectory.Management.ADUser
Возвращает один или несколько объектов пользователей.

Этот командлет возвращает значения свойств ADUser, входящих в набор по умолчанию. Чтобы получить дополнительные свойства ADUser, используйте параметр Properties.

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

Get-ADUser <пользователь>| Get-Member

Чтобы получить список наиболее часто используемых свойств объекта ADUser, воспользуйтесь следующей командой:

Get-ADUser <пользователь> -Properties Extended | Get-Member

Чтобы получить список всех свойств объекта ADUser, воспользуйтесь следующей командой:

Get-ADUser <пользователь> -Properties * | Get-Member

 

ПРИМЕЧАНИЯ

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

 

ПРИМЕР 1

Get-ADUser -Filter * -SearchBase "OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM"

Получает всех пользователей, принадлежащих к контейнеру ‘OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM’.

ПРИМЕР 2

Get-ADUser -Filter 'Name -like "*SvcAccount"' | FT Name,SamAccountName -A

Name,SamAccountName
SQL01 SvcAccount,SQL01
SQL02 SvcAccount,SQL02
IIS01 SvcAccount,IIS01

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

Получает всех пользователей, имена которых оканчиваются на «SvcAccount».

ПРИМЕР 3

Get-ADUser GlenJohn -Properties *

Surname : John
Name: Glen John
UserPrincipalName :
GivenName : Glen
Enabled : False
SamAccountName: GlenJohn
ObjectClass: user
SID : S-1-5-21-2889043008-4136710315-2444824263-3544
ObjectGUID: e1418d64-096c-4cb0-b903-ebb66562d99d
DistinguishedName : CN=Glen John,OU=NorthAmerica,OU=Sales,OU=UserAccounts,DC=FABRIKAM,DC=COM

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

Получает все свойства пользователя с именем учетной записи SAM «GlenJohn».

ПРИМЕР 4

Get-ADUser -Filter {Name -eq "GlenJohn"} -SearchBase "DC=AppNC" -Properties mail -Server lds.Fabrikam.com:50000

Получает пользователя с именем «GlenJohn» из экземпляра AD LDS.

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

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

]]>
https://coolcode.ru/powershell-get-aduser/feed/ 0
PowerShell. New-ADUser https://coolcode.ru/new-aduser/ https://coolcode.ru/new-aduser/#respond Fri, 07 Oct 2016 04:11:10 +0000 http://coolcode.ru/?p=10051

ОПИСАНИЕ

Создает нового пользователя Active Directory.

СИНТАКСИС

New-ADUser [-Name] <string> [-AccountExpirationDate <System.Nullable[System.DateTime]>] [-AccountNotDelegated <System.Nullable[bool]>] [-AccountPassword <SecureString>] [-llowReversiblePasswordEncryption <System.Nullable[bool]>] [-AuthType{Negotiate | Basic}] [-CannotChangePassword <System.Nullable[bool]>] [-Certificates <X509Certificate[]>] [-hangePasswordAtLogon <System.Nullable[bool]>] [-City <string>] [-Company <string>] [-Country <string>] [-Credential <PSCredential>][-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>] [-Instance <ADUser>] [-LogonWorkstations <string>] [-Manager <ADUser>] [-MobilePhone <string>] [-Office <string>] [-OfficePhone<string>] [-Organization <string>] [-OtherAttributes <hashtable>] [-OtherName <string>] [-PassThru <switch>] [-PasswordNeverExpires <System.Nullable[bool]>] [-PasswordNotRequired <System.Nullable[bool]>] [-Path <string>] [-POBox <string>] [-PostalCode <string>] [-ProfilePath <string>] [-SamAccountName <string>] [-ScriptPath <string>] [-Server <string>] [-ServicePrincipalNames <string[]>] [-SmartcardLogonRequired <System.Nullable[bool]>] [-State <string>] [-StreetAddress <string>] [-Surname <string>] [-Title <string>] [-TrustedForDelegation <System.Nullable[bool]>] [-Type <string>] [-UserPrincipalName <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

ОПИСАНИЕ

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

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

New-ADUser -SamAccountName "glenjohn" -GivenName "Glen" -Surname "John" -DisplayName "Glen John" -Path 'CN=Users,DC=fabrikam,DC=local' -OtherAttributes @{'msDS-PhoneticDisplayName'="GlenJohn"}

Для создания пользователя следует задать параметр SAMAccountName.

Командлет New-ADUser можно использовать для создания различных типов учетных записей пользователей, например учетных записей iNetOrgPerson. Чтобы сделать это в доменных службах Active Directory, задайте в параметре Type отображаемое имя LDAP типа создаваемой учетной записи. Этот тип может быть любым классом в схеме Active Directory, являющимся подклассом пользователя и имеющим категорию объекта «person».

Параметр Path задает контейнер или подразделение (OU) для нового пользователя. Если параметр Path не задан, командлет создает объект пользователя в контейнере по умолчанию для объектов пользователей в данном домене.

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

Метод 1. Используйте командлет New-ADUser, укажите обязательные параметры и задайте значения любых дополнительных свойств, используя параметры командлета.

Метод 2. Используйте шаблон для создания нового объекта. Для этого создайте новый объект пользователя или извлеките копию существующего объекта пользователя и задайте этот объект в качестве значения для параметра Instance. Передаваемый в параметр Instance объект используется в качестве шаблона для нового объекта. Значения свойств в шаблоне можно переопределять с помощью параметров командлетов. Примеры и дополнительные сведения см. в описании параметра Instance для данного командлета.

Метод 3. Используйте командлет Import-CSV с командлетом New-ADUser, чтобы создать несколько объектов пользователей Active Directory. Для этого воспользуйтесь командлетом Import-CSV, чтобы создать пользовательские объекты из файла разделенных запятыми значений (CSV), содержащего список свойств объектов. Затем передайте эти объекты по конвейеру командлету New-ADUser, чтобы создать объекты пользователей.

 

ПАРАМЕТРЫ

-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"

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

-AccountNotDelegated <System.Nullable[bool]>

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

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

-AccountNotDelegated $true

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

 

-AccountPassword <SecureString>

Задает новое значение пароля для учетной записи. Это значение хранится в виде зашифрованной строки.

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

В качестве пароля задано значение $null: пароль не задается и учетная запись отключается, если только ее включение не запрашивается.
Пароль не задан: пароль не задается и учетная запись отключается, если только ее включение не запрашивается.
Пароль пользователя задан: пароль задается и учетная запись отключается, если только ее включение не запрашивается.

Примечания.
По умолчанию учетные записи пользователей создаются без пароля. При предоставлении пароля предпринимается попытка задания пароля, однако она может оказаться неудачной в силу ограничений политики паролей. Учетная запись пользователя все же будет создана, и для нее можно будет задать пароль с помощью командлета Set-ADAccountPassword. В целях обеспечения безопасности учетных записей учетные записи пользователей не будут включаться, если только не задан допустимыйпароль или если для параметра PasswordNotRequired не задано значение true.
Учетная запись создается, если пароль не принимается по какой-либо причине.

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

-AccountPassword (Read-Host -AsSecureString "AccountPassword")

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

 

-AllowReversiblePasswordEncryption <System.Nullable[bool]>

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

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

-AllowReversiblePasswordEncryption $true

Необходимость параметров Не обязательный параметр
Позиция именованный параметр
Значение по умолчанию
Принимать входные данные конвейера true (ByPropertyName)
Принимать подстановочные знаки 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

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

 

-Certificates <X509Certificate[]>

Изменяет сертификаты 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,...)}

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

 

-ChangePasswordAtLogon <System.Nullable[bool]>

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

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

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

-ChangePasswordAtLogon $true

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

 

-City <string>

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

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

-City "Москва"

 

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

 

-Company <string>

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

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

-Company "Contoso"

 

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

 

-Country <string>

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

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

-Country "IN"

 

Необходимость парaметров Не обязательный параметр
Позиция именованный параметр.
Значение по умолчанию
Принимать входные данные конвейера true (ByPropertyName)
Принимать подстановочные знаки 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 вернет прерывающую ошибку.

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

 

-Department <string>

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

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

-Department "Development"

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

 

-Description <string>

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

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

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

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

 

-DisplayName <string>

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

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

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

 

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

 

-Division <string>

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

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

-Division "Software"

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

 

-EmailAddress <string>

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

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

-EmailAddress "innaozhogina@contoso.com"

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

 

-EmployeeID <string>

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

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

-EmployeeID "A123456"

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

 

-EmployeeNumber <string>

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

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

-EmployeeNumber "12345678"

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

 

-Enabled <System.Nullable[bool]>

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

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

-Enabled $true

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

 

-Fax <string>

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

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

-Fax "+1 (999) 555 1212"

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

 

-GivenName <string>

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

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

-givenName "Ivan"

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

 

-HomeDirectory <string>

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

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

-HomeDirectory "\\users\InnaOzhoginaHomeDir"

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

 

-HomeDrive <string>

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

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

-HomeDrive "D:"

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

 

-HomePage <string>

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

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

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

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

 

-HomePhone <string>

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

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

-HomePhone "+1 (999) 555 1212"

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

 

-Initials <string>

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

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

-Initials "L"

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

 

-Instance <ADUser>

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

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

Метод 1. Используйте существующий объект пользователя в качестве шаблона для нового объекта. Для получения экземпляра существующего объекта пользователя можно использовать командлет, например, Get-ADUser. Затем передайте этот объект в параметре Instance командлета New-ADUser для создания нового объекта пользователя. Значения свойств нового объекта можно переопределить, задав соответствующие параметры.

$userInstance = Get-ADUser -Identity "saraDavis" 
New-ADUser -SAMAccountName "ellenAdams" -Instance $userInstance -DisplayName "EllenAdams"

Метод 2. Создайте новый объект ADUser и задайте значения свойств с помощью интерфейса командной строки Windows PowerShell. Затем передайте этот объект в параметре Instance командлета New-ADUser для создания нового объекта пользователя Active Directory.

$userInstance = new-object Microsoft.ActiveDirectory.Management.ADUser
$userInstance.DisplayName = "Ellen Adams"
New-ADUser -SAMAccountName "ellenAdams" -Instance $userInstance

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

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

 

-LogonWorkstations <string>

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

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

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

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

 

Необходимость парaметров Не обязательный параметр
Позиция именованный параметр.
Значение по умолчанию
Принимать входные данные конвейера true (ByPropertyName)
Принимать подстановочные знаки 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

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

 

-MobilePhone <string>

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

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

-MobilePhone "+1 (999 ) 555 1212"

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

 

-Name <string>

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

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

-Name "InnaOzhogina"

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

 

-Office <string>

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

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

-Office "D1042"

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

 

-OfficePhone <string>

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

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

-OfficePhone "+1 (999) 555 1212"

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

 

-Organization <string>

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

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

-Organization "Accounting"

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

 

-OtherAttributes <hashtable>

Задает значение атрибутов объекта для атрибутов, которые не представлены параметрами командлета. С помощью этого параметра можно одновременно задать один или несколько параметров. Если атрибут позволяет задать более одного значения, ему можно присвоить несколько значений. Чтобы определить атрибут, укажите определенное для него отображаемое имя LDAP (ldapDisplayName) в схеме Active Directory.

Синтаксис:
Чтобы задать одно значение для атрибута:

-OtherAttributes @{'AttributeLDAPDisplayName'=значение}

Чтобы задать несколько значений для атрибута

-OtherAttributes @{'AttributeLDAPDisplayName'=значение1,значение2,...}

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

-OtherAttributes @{'Attribute1LDAPDisplayName'=значение; 'Attribute2LDAPDisplayName'=значение1,значение2;...}

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

Чтобы задать значение пользовательского атрибута favColors, который принимает набор строк в кодировке Юникод, воспользуйтесь следующим синтаксисом:

-OtherAttributes @{'favColors'="pink","purple"}

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

-OtherAttributes @{'favColors'="pink","purple"; 'dateOfBirth'=" 01/01/1960"}

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

 

-OtherName <string>

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

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

-OtherName "Ivanovich"

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

 

-PassThru <switch>

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

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

 

-PasswordNeverExpires <System.Nullable[bool]>

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

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

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

-PasswordNeverExpires $false

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

 

-PasswordNotRequired <System.Nullable[bool]>

Определяет, требуется ли пароль для данной учетной записи. Для новой учетной записи пароль не обязателен. Этот параметр задает свойство PasswordNotRequired объекта учетной записи.

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

-PasswordNotRequired $true

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

 

-Path <string>

Задает путь X.500 подразделения или контейнера, в котором создается объект.

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

В средах AD DS Значение по умолчанию, параметра Path будет установлено в следующих случаях.
— Если командлет выполняется с диска поставщика Active Directory PowerShell, в качестве значения параметра устанавливается текущий путь к диску поставщика.
— Если для командлета задан путь по умолчанию, будет использоваться этот путь. Пример: в командлете New-ADUser значение параметра Path по умолчанию соответствует контейнеру Users.
— Если ни один из представленных выше вариантов не применим, в качестве значения Path по умолчанию будет использоваться раздел по умолчанию или контекст именования целевого домена.

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

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

-Path "ou=mfg,dc=noam,dc=corp,dc=contoso,dc=com"

Примечание. Командлеты поставщика Active Directory, например New-Item, Remove-Item, Remove-ItemProperty, Rename-Item и Set-ItemProperty, также содержат свойство Path. Однако для командлетов поставщиков параметр Path идентифицирует путь к реальному объекту, а не к контейнеру как для командлетов Active Directory.

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

 

-POBox <string>

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

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

-POBox "25662"

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

 

-PostalCode <string>

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

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

-PostalCode "28712"

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

 

-ProfilePath <string>

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

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

-ProfilePath "\\users\profiles\innaOzhogina"

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

 

-SamAccountName <string>

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

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

-SAMAccountName "innaozhogina"

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

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

 

-ScriptPath <string>

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

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

-ScriptPath "\\logonScripts\innaozhoginaLogin"

 

Необходимость парaметров Не обязательный параметр
Позиция именованный параметр.
Значение по умолчанию
Принимать входные данные конвейера true (ByPropertyName)
Принимать подстановочные знаки 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"

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

 

-ServicePrincipalNames <string[]>

Задает имена участников-служб для учетной записи. Этот параметр задает свойство 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"}

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

 

-SmartcardLogonRequired <System.Nullable[bool]>

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

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

-SmartCardLogonRequired $true

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

 

-State <string>

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

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

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

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

 

-StreetAddress <string>

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

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

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

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

 

-Surname <string>

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

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

-Surname "Komashinsky"

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

 

-Title <string>

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

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

-Title "Manager"

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

 

-TrustedForDelegation <System.Nullable[bool]>

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

$false или 0
$true или 1

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

-TrustedForDelegation $true

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

 

-Type <string>

Указывает тип создаваемого объекта. Задайте для параметра Type отображаемое имя LDAP класса схемы Active Directory, соответствующего типу создаваемого объекта. Выбранный тип должен быть подклассом класса схемы User Если параметр не указан, Значение по умолчанию, будет равно «User».

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

-Type "InetOrgPerson"

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

 

-UserPrincipalName <string>

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

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

 

-Confirm [<SwitchParameter>]

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

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

 

-WhatIf [<SwitchParameter>]

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

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

<CommonParameters>

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

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

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

Объект пользователя, который является шаблоном нового объекта пользователя, принимается параметром Instance.

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

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

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

ПРИМЕЧАНИЯ

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

ПРИМЕР 1

New-ADUser GlenJohn -Certificate (new-object System.Security.Cryptography.X509Certificates.X509Certificate -ArgumentList "export.cer")

Создает нового пользователя «GlenJohn» с помощью сертификата, импортируемого из файла «export.cer».

ПРИМЕР 2

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

Создает нового пользователя «GlenJohn», задавая должность и адрес почты для нового объекта.

ПРИМЕР 3

New-ADUser GlenJohn -Type iNetOrgPerson -Path "DC=AppNC" -server lds.Fabrikam.com:50000

Создает новый объект inetOrgPerson с именем «GlenJohn» в экземпляре AD LDS.

 

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

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

]]>
https://coolcode.ru/new-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
PowerShell. Решение проблем связынных с удалённым подключением (about_Remote_Troubleshooting) https://coolcode.ru/powershell-reshenie-problem-svyazyinnyih-s-udalyonnyim-podklyucheniem-about_remote_troubleshooting/ https://coolcode.ru/powershell-reshenie-problem-svyazyinnyih-s-udalyonnyim-podklyucheniem-about_remote_troubleshooting/#respond Tue, 29 Dec 2015 09:53:26 +0000 http://coolcode.ru/?p=5322

В этом разделе описываются некоторые из проблем, которые могут возникнуть при использовании функций удалённого взаимодействия Windows PowerShell, основанные на технологии WS-Management, и предлагаются решения этих проблем.

Перед использованием удалённого взаимодействия Windows PowerShell , рекомендуется ознакомиться с about_Remote и about_Remote_Requirements для изучения руководств по конфигурации и базовом использовании удалённого взаимодействия. Кроме того, справки по каждому из командлетов удаленного взаимодействия, в частности описание параметров, имеют полезную информацию, которая предназначена, чтобы помочь вам избежать проблем.

Обновленные версии этой темы, и другие справки Windows PowerShell, могут быть скачаны с помощью командлета Update-Help.

ПРИМЕЧАНИЕ: Чтобы просмотреть или изменить настройки для локального компьютера на диске WSMan: , в том числе изменить конфигурацию сессий, доверенных хостов, портов или слушателей, запустите Windows PowerShell с параметром «Запуск от имени администратора».

 

Решение вопросов, связанных с правами доступа и аутентификации

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

 

 Как запустить от имени администратора

ОШИБКА: Отказано в доступе. Вам необходимо запустить этот командлет с повышенными правами.
ERROR: Access is denied. You need to run this cmdlet from an elevated process.

Чтобы запустить сессию удаленного взаимодействия на локальном компьютере, или просмотреть и изменить настройки локального компьютера на диске WSMan:, в том числе изменить конфигурацию сессий, доверенных хостов, портов или слушателей, необходимо запустить Windows PowerShell командой «Запуск от имени администратора».

Чтобы запустить Windows PowerShell командой «Запуск от имени администратора»:
— Щелкните правой кнопкой мыши по значку Windows PowerShell (или Windows PowerShell ISE) и нажмите «Запуск от имени администратора».

Чтобы запустить Windows PowerShell командой «Запуск от имени администратора» в Windows 7 и Windows Server 2008 R2.
— На панели задач Windows, щелкните правой кнопкой мыши значок Windows PowerShell, а затем нажмите кнопку «Запуск от имени администратора».

Примечание: По умолчанию, в Windows Server 2008 R2, значок Windows PowerShell закреплен на панели задач .

 

Как включить удаленное взаимодействие

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED
или
ОШИБКА: В соединении с удаленным хостом было отказано. Убедитесь, что служба WS-Management запущена на удаленном хосте и настроена для прослушивания запросов на правильный порт и HTTP URL.
ERROR: The connection to the remote host was refused. Verify that the WS-Management service is running on the remote host and configured to listen for requests on the correct port and HTTP URL.

Для того, что бы компьютер отправлял удалённые команды не требуется ни каких настроек. Тем не менее, для получения удаленных команд, Windows PowerShell Remoting должен быть настроен на удалённом компьютере. Настройка включает в себя запуск службы WinRM, установка типа запуска для службы WinRM в Automatic режим, настройка прослушивания HTTP и HTTPS соединений, а также создание конфигураций сеансов по умолчанию.

По умолчанию, Windows PowerShell Remoting включен в Windows Server 2012 и более новых версиях серверных систем Windows. Чтобы включить удаленное взаимодействие, на всех других системах, необходимо запустить командлет Enable-PSRemoting. На Windows Server 2012 и более новых версиях Windows Server, можно так же повторно запустить командлет Enable-PSRemoting, это включит удаленное взаимодействие, если оно было отключено.

Чтобы настроить компьютер на получение удаленных команд, воспользуйтесь командлетом Enable-PSRemoting. Этот командлет настроит все необходимые параметры удаленного взаимодействия, настроит конфигурацию сессий и перезапустит службы WinRM, чтобы изменения вступили в силу.

Enable-PSRemoting

Для подавления всех пользовательских подсказок укажите парметр -Force:

Enable-PSRemoting -Force

Для получения дополнительной информации см Enable-PSRemoting.

 

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

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED
или
ОШИБКА: В соединении с удаленным хостом было отказано. Убедитесь, что служба WS-Management запущена на удаленном хосте и настроена для прослушивания запросов на правильный порт и HTTP URL.
ERROR: The connection to the remote host was refused. Verify that the WS-Management service is running on the remote host and configured to listen for requests on the correct port and HTTP URL.

Для настройки одного компьютера на приёма соединений и выполнения на нём удалённых команд в Windows PowerShell, используется командлет Enable-PSRemoting.

Чтобы включить удаленное взаимодействие на нескольких компьютерах в предприятии, можно воспользоваться следующим вариантом.
— Чтобы настроить слушателей на удаленное взаимодействие, надо включить параметр «Allow automatic configuration of listeners» в групповой политике. Для получения инструкций см «Как включить слушателей с помощью групповой политики» (раздел ниже).
— Чтобы на нескольких компьютерах изменить тип запуска Windows Remote Management (WinRM) на Automatic, используется командлет Set-Service. Для получения инструкций см «Как изменить тип запуска, в службе WinRM» (раздел ниже).
— Чтобы настроить исключение брандмауэра, надо воспользоваться групповой политикой «Windows Firewall: Allow Local Port Exceptions». Для получения инструкций см «Как создать исключение в брандмауэре, с помощью групповой политики» (раздел ниже).

 

Как включить слушателей с помощью групповой политики

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED
или
ОШИБКА: В соединении с удаленным хостом было отказано. Убедитесь, что служба WS-Management запущена на удаленном хосте и настроена для прослушивания запросов на правильный порт и HTTP URL.
ERROR: The connection to the remote host was refused. Verify that the WS-Management service is running on the remote host and configured to listen for requests on the correct port and HTTP URL.

Чтобы настроить слушателей на всех компьютерах в домене, надо включить политику «Allow automatic configuration of listeners» находящуюся по следующему пути дерева групповых политик:

Computer Configuration\Administrative Templates\Windows Components\Windows Remote Management (WinRM)\WinRM service

Включите политику и укажите IPv4 и IPv6 фильтры. Можно воспользоваться шаблонами (*).

 

Как включить удаленное взаимодействие в сетях общего пользования

ОШИБКА: Не удалось проверить состояние брандмауэра
ERROR: Unable to check the status of the firewall

Командлет Enable-PSRemoting возвращает эту ошибку, когда локальная сеть является публичной, но параметр SkipNetworkProfileCheck не использовался в команде.

На серверных версиях Windows, командлет Enable-PSRemoting успешно выполняется во всех типах сетевого расположения. Он создает правила брандмауэра, разрешающие удаленный доступ к частной и доменой («Home» и «Work») сети. Для общественных сетей, он создает правила брандмауэра, которые разрешают удаленный доступ из той же локальной подсети.

На клиентских версий Windows, командлет Enable-PSRemoting успешно выполняется в частных и доменных сетях. По умолчанию, он не работает на общественных сетях, но если вы используете параметр SkipNetworkProfileCheck, командлет Enable-PSRemoting успешно создает правила брандмауэра, что разрешает трафик из той же локальной подсети.

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

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

Командлет Set-NetFirewallRule содержится в модуле NetSecurity.

ПРИМЕЧАНИЕ: В Windows PowerShell 2.0, на компьютерах под управлением серверных версий Windows, командлет Enable-PSRemoting создает правила брандмауэра, разрешающие удаленный доступ из частных, доменых и общественных сетях. На компьютерах, работающих под управлением клиентских версий Windows, командлет Enable-PSRemoting создаёт правила брандмауэра, разрешающие удаленный доступ только из частных и доменных сетей.

 

Как настроить исключение брандмауэра с помощью групповой политики

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED
или
ОШИБКА: В соединении с удаленным хостом было отказано. Убедитесь, что служба WS-Management запущена на удаленном хосте и настроена для прослушивания запросов на правильный порт и HTTP URL.
ERROR: The connection to the remote host was refused. Verify that the WS-Management service is running on the remote host and configured to listen for requests on the correct port and HTTP URL.

Чтобы настроить исключение брандмауэра для всех компьютеров в домене, надо настроить политику «Windows Firewall: Allow local port exceptions» по следующему пути в дереве групповых политик:

Computer Configuration\Administrative Templates\Network\Network Connections\Windows Firewall\Domain Profile

Эта политика позволяет членам группы Administrators на компьютере, использовать Windows Firewall в панели управления, чтобы создать исключение в брандмауэре, для службы удаленного управления Windows.

 

Как установить тип запуска службы WinRM

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED

Windows PowerShell Remoting зависит от службы удаленного управления Windows (WinRM). Для поддержки удаленных команд служба должна быть запущена .

На серверных версиях Windows, тип запуска службы удаленного управления Windows (WinRM) автоматический.

Тем не менее, на клиентских версиях Windows, служба WinRM по умолчанию отключена.

Чтобы установить тип запуска службы на удаленном компьютере, можно воспользоваться командлетом Set-Service.

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

Например, следующие команды получают список имен компьютеров из файла Servers.txt, а затем у всех компьютеров устанавливают тип запуска службы WinRM на автоматический.

C:\PS> $servers = Get-Content servers.txt
C:\PS> Set-Service WinRM -ComputerName $servers -startuptype Automatic

Увидеть результаты можно с помощью командлета Get-WmiObject получив данные из объекта Win32_Service. Для получения дополнительной информации см Set-Service.

 

Как настроить конфигурацию сессий по умолчанию

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED

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

По умолчанию, при использовании командлета Enable-PSRemoting, создаётся конфигурация сессий  на локальном компьютере. Удаленные пользователи используют эту конфигурацию сессий каждый раз, когда удалённая команда не использует параметр ConfigurationName.

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

Если вы изменили конфигураций сессий по умолчанию и хотите восстановить исходные настройки конфигурации сессий по умолчанию. Надо воспользоваться командлетом Unregister-PSSessionConfiguration, для удаления изменённой конфигурации сесий. А затем использвать командлет Enable-PSRemoting, что бы восстановить настройки по умолчанию. командлет Enable-PSRemoting не изменяет существующую конфигурацию сессий.

Примечание: Командлет Enable-PSRemoting восстанавливая конфигурацию сеанса по умолчанию, он не создает явные дескрипторы безопасности для конфигураций. Вместо этого, конфигурация наследуют дескриптор безопасности RootSDDL, который является дескриптором безопасной по умолчанию.

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

Get-Item wsman:\localhost\Service\RootSDDL

Чтобы изменить RootSDDL, используются командлеты Set-Item на диске WSMan:. Чтобы изменить дескриптор безопасности конфигурации сеанса, используйется командлет Set-PSSessionConfiguration с параметром SecurityDescriptorSDDL или ShowSecurityDescriptorUI.
Для получения более подробной информации о диске WSMan:, можно посмотреть раздел справки для поставщика WS-Management («Get-Help WSMan»).

 

Как обеспечить администратора необходимыми полномочиями

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED

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

Если текущий пользователь является членом группы администраторов на удаленном компьютере, или может предоставить учетные данные члена группы администраторов, для удаленного подключения нужно передать учётные данные администратора с помощью параметра Credential в командлетах New-PSSession, Enter-PSSession или Invoke-Command.

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

Invoke-Command -ComputerName Server01 -Credential Domain01\Admin01

Для получения более подробной информации о параметре Credential, можно посмотреть справку к командлетам New-PSSession, Enter-PSSession или Invoke-Command.

 

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

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED

Чтобы установить PSSession или выполнить команду на удаленном компьютере, текущий пользователь должен иметь разрешение на использование конфигураций сеансов на удаленном компьютере.

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

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

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

Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI

Для получения дополнительной информации см about_Session_Configurations.

 

Как включить удаленное взаимодействие для администраторов в других доменах

ОШИБКА: доступ запрещен
ERROR: ACCESS IS DENIED

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

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

Внимание: Ключ LocalAccountTokenFilterPolicy отключает контроль учетных записей (UAC) удаленных подключений для всех пользователей со всех компьютеров. Обдумайте последствия изменения этого параметра, прежде чем изменять политику.

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

C:\PS> New-ItemProperty -Name LocalAccountTokenFilterPolicy -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -PropertyType DWord -Value 1

 

Как использовать IP адрес при запуске команды удаленно

ОШИБКА: Клиенту WinRM не удается обработать запрос. Если схема аутентификации отличается от Kerberos или, если клиентский компьютер не присоединен к домену, то необходимо использовать протокол HTTPS или на сервере должны быть добавлены установки  конфигурации TrustedHosts.

ERROR: The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting.

Параметр ComputerName командлетов New-PSSession, Enter-PSSession и Invoke-Command могут принимать IP-адрес в качестве значения. Тем не менее, поскольку проверка подлинности Kerberos не поддерживает IP-адреса, когда вы указываете IP адрес, по умолчанию используется аутентификация NTLM.

Для использования проверки подлинности NTLM, требуется следующая процедура для удаленного взаимодействия.

1. Настроить компьютер для протокола HTTPS или добавить IP-адрес удаленного компьютера в список TrustedHosts на локальном компьютере.

Для получения инструкций см «Как добавить компьютер в список TrustedHosts» ниже.

2. Необходимо использовать параметр Credential во всех удаленных командах. Это необходимо, даже если вы указываете параметры аутентификации текущего пользователя.

 

Как создать удалённое подключение к компьютеру находящемуся в рабочей группе

ОШИБКА: Клиенту WinRM не удается обработать запрос. Если схема аутентификации отличается от Kerberos или, если клиентский компьютер не присоединен к домену, то необходимо использовать протокол HTTPS или на сервере должны быть добавлены установки  конфигурации TrustedHosts.

ERROR: The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting.

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

1. Настроить компьютер для протокола HTTPS или добавить имена удаленных компьютеров в список TrustedHosts на локальном компьютере.

Для получения инструкций см «Как добавить компьютер в список TrustedHosts» ниже.

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

Чтобы установить пароль для учетной записи пользователя, используйте «Учетные записи пользователей» в «Панели управления».

3. Используйте параметр Credential во всех удаленных командах.

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

 

Как добавить компьютер в список доверенных хостов

Пункт TrustedHosts может содержать список имён компьютеров, IP-адреса и полные доменные имена разделенные запятыми. Шаблонные символы разрешены.

Чтобы просмотреть или изменить список доверенных узлов, можно воспользоваться диском WSMan:. Объект TrustedHost находится в дирректории WSMan:\localhost\Client.

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

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

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

Get-Item wsman:\localhost\Client\TrustedHosts

Также можно использовать Set-Location (псевдоним cd), чтобы перейти в данную директорию на диске WSMan:. Например:

cd WSMan:\localhost\Client; dir

Чтобы добавить все компьютеры в список доверенных хостов, используйте следующую команду, которая ставит значение * (все) в ComputerName

Set-Item wsman:localhost\client\trustedhosts -Value *

Можно, также использовать шаблонный символ (*), чтобы добавить все компьютеры в конкретной области в список доверенных хостов. Например, следующая команда добавляет все компьютеры в домене Fabrikam в список доверенных хостов.

Set-Item wsman:localhost\client\trustedhosts *.fabrikam.com

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

Set-Item wsman:\localhost\Client\TrustedHosts -Value < имя_компьютера> [, < имя_компьютера>]

,где каждое значение < имя_компьютера> должно иметь следующий формат:

< Компьютер>.< Домен>.< Компания>.< Домен верхнего уровня>

Например:

Set-Item wsman:\localhost\Client\TrustedHosts -Value Server01.Domain01.Fabrikam.com

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

Например, чтобы добавить компьютер Server01 в в существующий список доверенных хостов, используйте следующую команду

$curValue = (Get-Item wsman:\localhost\Client\TrustedHosts).value

Set-Item wsman:\localhost\Client\TrustedHosts -Value "$curValue, Server01.Domain01.Fabrikam.com"

Чтобы добавить IP-адреса компьютеров в список доверенных хостов, используется следующий формат команды:

Set-Item wsman:\localhost\Client\TrustedHosts -Value <IP Address>

Например:

Set-Item wsman:\localhost\Client\TrustedHosts -Value 172.16.0.0

Чтобы добавить компьютер в список TrustedHosts удаленного компьютера, можно воспользоваться командлетом Connect-WSMan. Командлет  Connect-WSMan используется для добавления узла на диске WSMan: удаленного компьютера с локального компьютера. Затем используйте команду Set-Item, чтобы добавить компьютер.

Для получения более подробной информации о командлете Connect-WSMan командлета см справку Connect-WSMan.

 

Устранение неполадок конфигурации компьютера

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

 

Как настроить удаленное взаимодействие на переменных портах

ОШИБКА: В соединении с удаленным хостом было отказано. Убедитесь, что служба WS-Management запущена на удаленном хосте и настроена для прослушивания запросов на правильный порт и HTTP URL.
ERROR: The connection to the remote host was refused. Verify that the WS-Management service is running on the remote host and configured to listen for requests on the correct port and HTTP URL.

По умолчанию Windows PowerShell Remoting использует 80 порт для HTTP протокола. Порт по умолчанию используется, когда пользователь не указал параметры ConnectionURI или порт в удаленной команды.

Чтобы изменить порт по умолчанию, который использует Windows PowerShell, используйте командлет Set-Item на диске WSMan:, чтобы изменить значение порта для прослушки.

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

Set-Item wsman:\localhost\listener\listener*\port -Value 8080

 

Как настроить удаленное взаимодействие через прокси-сервер

ОШИБКА: клиент не может подключиться к месту назначения, указанного в запросе. Убедитесь, что служба в месте назначения работает и принимает запросы.

ERROR: The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests.

Поскольку Windows PowerShell Remoting использует протокол HTTP, то он зависит от установок прокси на HTTP. На предприятиях, которые имеют прокси-серверы, пользователи не могут получить доступ к удаленному компьютеру Windows PowerShell напрямую.

Чтобы решить эту проблему, передайте настройки прокси-сервера при запуске удаленных команд.
Доступны следующие параметры:

— ProxyAccessType
— ProxyAuthentication
— ProxyCredential

Чтобы задать эти параметры для определенной команды, используйте следующую процедуру:

1. Используйте параметры ProxyAccessType, ProxyAuthentication и ProxyCredential с командлетом New-PSSessionOption, для создания объекта параметров сеанса с настройкми прокси-сервера  вашей сети. Сохраните объект в переменной.

2. Передайте переменную, которая содержит объект с парматрами вашего прокси сервера в  параметр SessionOption командлетов New-PSSession, Enter-PSSession, или Invoke-Command

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

C:\PS> $SessionOption = New-PSSessionOption -ProxyAccessType IEConfig -ProxyAuthentication Negotiate -ProxyCredential Domain01\User01
C:\PS> New-PSSession -ConnectionURI https://www.fabrikam.com

Для получения более подробной информации о командлете New-PSSessionOption см справку по New-PSSessionOption.

Чтобы задать эти параметры для всех удаленных команд в текущем сеансе, присвойте значение объекта  полученного из командлета New-PSSessionOption переменной $PSSessionOption. Для получения более подробной информации о привилегированной переменной $PSSessionOption см about_Preference_Variables.

Чтобы задать эти параметры для всех удаленных команд всех сессий Windows PowerShell на локальном компьютере, надо добавить привилегированную переменную $PSSessionOption в свой профиль Windows PowerShell. Для получения более подробной информации о профилях Windows PowerShell см about_Profiles.

 

Как обнаружить 32-битную сессию на 64-разрядном компьютере

ОШИБКА: Элемент «<tool-Name>» не распознается, как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильность написания имени, или если был указан путь, убедитесь, что путь является правильным и попробуйте еще раз.

ERROR: The term «<tool-Name>» is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Если удаленный компьютер работает под управлением 64-разрядной версии Windows, а дистанционная команда использует 32-битную конфигурацию сеанса, такую как Microsoft.PowerShell32. Служба удаленного управление Windows (WinRM) загружает процесс WOW64 на Windows, а Windows автоматически перенаправляет все ссылки из каталога %WinDir%\System32, в каталог %WINDIR%\SysWOW64.

В результате, если вы пытаетесь использовать инструменты из каталога System32, которые не имеют аналогов в каталоге SysWow64, таких как Defrag.exe, инструменты не могут найтись в данном каталоге.

Чтобы найти архитектуру процессора, который используется в сессии, можно воспользоваться значением переменной PROCESSOR_ARCHITECTURE окружающей среды. Следующая команда находит архитектуру процессора сессии из переменной $s.

C:\PS> $s = New-PSSession -ComputerName Server01 -configurationName CustomShell

C:\PS> invoke-command -session $s {$env:PROCESSOR_ARCHITECTURE}
x86

Для получения более подробной информации о конфигурациях сеансов см about_session_configurations.

 

Поиск и устранение неисправностей политик и вопросы привилегий

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

 

Как изменить политику выполнения для командлетов Import-PSsession и Import-Module

ОШИБКА: Import-Module: Файл <имя файла> не может быть загружен, потому что выполнение скриптов отключено в этой системе.

ERROR: Import-Module: File <filename> cannot be loaded because the execution of scripts is disabled on this system.

Командлеты Import-PSSession и Export-PSSession создают модули, которые содержат не подписанные файлы скриптов и файлы форматирования.

Чтобы импортировать модули созданные этими командлетами, с помощью командлетов Import-PSSession или Import-Module, измените значение политики выполнения в текущем сеансе на Restricted или AllSigned. Дополнительные сведения о политиках выполнения Windows PowerShell можно посмотреть в about_Execution_Policies.

Чтобы импортировать модули без изменения политики выполнения для локального компьютера, который изменяет реестр, можно использовать параметр Scope командлета Set-ExecutionPolicy, что бы задать менее жёсткую политику выполнения для одного процесса.

Например, следующая команда запускает процесс с политикой выполнения RemoteSigned. Изменение политики выполнения распространяется только на текущий процесс и не изменяет параметры реестра Windows PowerShell ExecutionPolicy.

Set-ExecutionPolicy -Scope process -ExecutionPolicy RemoteSigned

Можно, также использовать параметр ExecutionPolicy при запуске PowerShell.exe, чтобы начать один сеанс с менее ограничительной политикой выполнения.

PowerShell.exe -ExecutionPolicy RemoteSigned

Для получения более подробной информации о командлетах см Import-PSSession, Export-PSSession и Import-Module. Для получения более подробной информации о политике выполнения, см about_Execution_Policies. Для получения более подробной информации о powershell.exe, выполните в консоли «PowerShell.exe -?».

 

Как устанавливать и изменять квоты

ОШИБКА: Общее кол-во данных, полученных от удаленного клиента превысили разрешенный максимум.

ERROR: The total data received from the remote client exceeded allowed maximum.

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

Следующие квоты доступны в базовой конфигурации.

— Поставщик WSMan (WSMan:) предоставляет несколько параметров квот, таких, как  настройки MaxEnvelopeSizeKB и MaxProviderRequests  в  узле WSMan:\<ComputerName> и настройки MaxConcurrentOperations, MaxConcurrentOperationsPerUser и MaxConnections  в узле WSMan:\<ComputerName>\Service,

— Вы можете защитить локальный компьютер с помощью параметров MaximumReceivedDataSizePerCommand и MaximumReceivedObjectSize командлета New-PSSessionOption и привилегированной переменной $PSSessionOption.

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

Когда квоты конфликтуют с командой, Windows PowerShell создаёт ошибку.

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

Например, следующая команда увеличивает квоту на размер объектов в конфигурации сеанса Microsoft.PowerShell на удаленном компьютере с 10 МБ (значение по умолчанию) до 11 МБ.

Set-PSSessionConfiguration -Name microsoft.PowerShell -MaximumReceivedObjectSizeMB 11 -Force

Для получения более подробной информации о командлете New-PSSessionOption см New-PSSessionOption.

Для получения более подробной информации о квотах WS-Management, можно посмотреть раздел справки для WS-Management провайдера («Get-Help WS-Management»).

 

Как решить ошибки тайм-аута

ОШИБКА: Служба WS-Management не может завершить операцию в течение времени, указанного в OperationTimeout.

ERROR: The WS-Management service cannot complete the operation within the time specified in OperationTimeout.

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

Следующие тайм-ауты доступны в базовой конфигурации.

— Провайдер WSMan (WSMan:) предоставляет на стороны клиента и сервера несколько  параметров тайм-аута, такие как настройка MaxTimeoutms в узле WSMan:\<ComputerName> и настройки EnumerationTimeoutms и MaxPacketRetrievalTimeSeconds в узле WSMan:\<ComputerName>\Service.

-Можно защитить локальный компьютер с помощью параметров CancelTimeout, IdleTimeout, OpenTimeout и OperationTimeout командлета New-PSSessionOption и привилегированной переменной $PSSessionOption.

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

Когда значение тайм-аута не разрешает завершить операцию, Windows PowerShell прерывает операцию и генерирует сообщение об ошибке.

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

Например, следующие команды используют командлет New-PSSessionOption для создания объекта параметра сеанса со значением OperationTimeout в 4 минуты (240000 MS), а затем используют объект параметра сеанса, чтобы создать удаленный сеанс.

C:\PS> $pso = New-PSSessionoption -OperationTimeout 240000
C:\PS> New-PSSession -ComputerName Server01 -sessionOption $pso

Для получения более подробной информации о тайм-аутах WS-Management, можно посмотреть раздел справки для поставщика WS-Management (например «Get-Help WSMan»).

Для получения более подробной информации о командлете New-PSSessionOption см New-PSSessionOption.

 

Поведение при зависания, поиск и исправление неисправностей

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

 

Как прервать команду

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

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

Для завершения работы зависшей программы, нажмите CTRL + C. Для просмотра ошибок, которые возможно выводились, введите «$error» в локальном хосте и удаленном сеансе.

 

Как восстановиться после сбоя операции

ОШИБКА: Операция ввода/вывода была прервана из-за разрыва соединения или по запросу от приложения.

ERROR: The I/O operation has been aborted because of either a thread exit or an application request.

Эта ошибка возвращается, когда операция прерывается, до ее завершения. Как правило, это происходит, когда служба WinRM останавливается или перезапускается, а другие операции WinRM остаются в работе.

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

1. Запустите Windows PowerShell с параметром «Запуск от имени администратора».
2. Выполните следующую команду:

Start-Service WinRM

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

СМОТРИТЕ ТАКЖЕ
about_Remote
about_Remote_Requirements
about_Remote_Variables

]]>
https://coolcode.ru/powershell-reshenie-problem-svyazyinnyih-s-udalyonnyim-podklyucheniem-about_remote_troubleshooting/feed/ 0
PowerShell. О требованиях к инраструктуре для работы дистанционного подключения. (about_Remote_Requirements) https://coolcode.ru/powershell-o-trebovaniyah-k-inrastrukture-dlya-rabotyi-distantsionnogo-podklyucheniya-about_remote_requirements/ https://coolcode.ru/powershell-o-trebovaniyah-k-inrastrukture-dlya-rabotyi-distantsionnogo-podklyucheniya-about_remote_requirements/#respond Wed, 09 Dec 2015 10:35:49 +0000 http://coolcode.ru/?p=5303

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

Примечание: Многие командлеты (в том числе командлеты Get-Service, Get-Process, Get-WMIObject, Get-EventLog, и Get-WinEvent) могут получать объекты с удаленных компьютеров с помощью методов для извлечения объектов Microsoft .NET Framework. Они не используют инфраструктуру удаленного взаимодействия Windows PowerShell. Требования в этом документе не распространяются на эти команды.

Чтобы найти командлеты, которые имеют параметр ComputerName, и не используют Windows PowerShell Remoting, можно воспользоваться командлетом Get-Command.

Get-Command -ParameterName ComputerName

Системные требования

Для запуска удаленных сеансов с поддержкой возможностей Windows PowerShell 3.0, локальные и удаленные компьютеры должны иметь следующее компоненты:
— Windows PowerShell 3.0 или более позднюю версию
— Платформу Microsoft .NET Framework 4.0 или более позднюю версию
— Windows Remote Management 3.0

Для запуска удаленных сеансов с возможностями Windows PowerShell 2.0, локальные и удаленные компьютеры должны иметь следующее компоненты:
— Windows PowerShell 2.0 или более позднюю версию
— Платформа Microsoft .NET Framework 2.0 или более позднюю версию
— Windows Remote Management 2.0

Можно создавать удалённые сеансы связи между компьютерами под управлением Windows PowerShell 2.0 и Windows PowerShell 3.0. Тем не менее, возможности удалённых соединений которые работают только на Windows PowerShell 3.0, например такое как способность переподключаться к сессиям, доступны только тогда, когда оба компьютеры работают под управлением Windows PowerShell 3.0.

Чтобы посмотреть номер версии Windows PowerShell установленной на текущем компьютере, можно воспользоваться автоматической переменной $PSVersionTable.

Windows Remote Management (WinRM) 3.0 и Microsoft .NET Framework 4.0 включены в Windows 8, Windows Server 2012, и новые выпуски операционных системы Windows. В более поздних операционных системах надо установить WinRM 3.0 он входит в Management Framework 3.0 для Windows. Если компьютер не имеет требуемой версии WinRM или Microsoft .NET Framework, произойдёт сбой установки.

 

Права пользователя

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

Разрешения необходимые для создания сессий и выполнения команд на удаленном компьютере (или в удаленной сессии на локальном компьютере) устанавливаются конфигурацией сеанса (также известной как «endpoint») на удаленном компьютере, к которому подключается сессия. В частности, дескриптор безопасности конфигурации сеанса определяет, кто имеет доступ к конфигурации сеанса и кто может использовать его для подключения.

По умолчанию, дескрипторы безопасности конфигураций сеансов  Microsoft.PowerShell, Microsoft.PowerShell32 и Microsoft.PowerShell.Workflow, разрешают доступ только для членов группы администраторов.

Если текущий пользователь не имеет разрешения на использование конфигурации сеанса, то команда запускающая команды (используется временная сессия) или создание постоянного сеанса на удаленном компьютере не удастся. Пользователь может использовать параметр командлетов ConfigurationName, которые создают сеансы с помощью другой конфигурации сеанса, если таковые имеются.

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

Для получения дополнительной информации о конфигурациях сеансов см about_Session_Configurations.

 

Сетевое окружение Windows

Начиная с Windows PowerShell 3.0, командлетом Enable-PSRemoting можно включить удаленное взаимодействие на клиентских и серверных операционных систем, в домене и общественных сетях.

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

На клиентских версиях Windows в частных и доменных сетях, по умолчанию командлет Enable-PSRemoting создает правило брандмауэра, которое позволяет неограниченный удаленный доступ.

Чтобы включить удаленное взаимодействие на клиентских версиях Windows с сетями общего пользования, используется параметр SkipNetworkProfileCheck командлета Enable-PSRemoting. Это создаст правило брандмауэра, которое разрешает удаленный доступ только с компьютеров в локальной подсети.

Чтобы убрать ограничение только локальной подсетью и разрешить удаленный доступ из всех мест, в клиентских и серверных версиях Windows, используется командлет Set-NetFirewallRule из модуля NetSecurity. Надо выполнить следующую команду:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

В Windows PowerShell 2.0, на серверных версиях Windows, Enable-PSRemoting создает правила брандмауэра, которое разрешает удаленный доступ на все сети.

В Windows PowerShell 2.0, на клиентских версиях Windows, Enable-PSRemoting создает правила брандмауэра только для частных и доменных сетей. Если сетевое расположение является публичным, Enable-PSRemoting не выполнится.

 

Запуск от имени администратора

Права администратора требуются для выполнения следующих операций удаленного взаимодействия:
— Установление удаленного подключения к локальному компьютеру. Такое подключение называется «loopback» или «local» сессия.
— Настройка конфигурации сессии на локальном компьютере.
— Просмотр и изменение настроек WS-Management на локальном компьютере. Эти настройки находятся в узле LocalHost на диске WSMAN:.

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

В Windows 7 и Windows Server 2008 R2, чтобы запустить Windows PowerShell с параметром «Запуск от имени администратора»:
1. Нажмите кнопку Пуск, выберите «Все программы», войдите в «Стандартные», а затем нажмите на папку «Windows PowerShell».
2. Щелкните правой кнопкой мыши на ярлык «Windows PowerShell», а затем нажмите кнопку «Запуск от имени администратора».

В ранних версиях Windows, чтобы запустить Windows PowerShell с параметром «Запуск от имени администратора»:
1. Нажмите кнопку «Пуск», выберите «Все программы», а затем зайдите папку «Windows PowerShell».
2. Щелкните правой кнопкой мыши на ярлык «Windows PowerShell», а затем нажмите кнопку «Запуск от имени администратора».

В проводнике Windows опция «Запуск от имени администратора», также доступна в других видах запуска Windows PowerShell, в том числе на ярлыках. Просто нажмите правой кнопкой мыши элемент, а затем нажмите кнопку «Запуск от имени администратора».

Когда вы запускете Windows PowerShell из другой программы, такой как Cmd.exe, используйте опцию «Run as administrator» при запуске программы.

Как настроить компьютер для удаленного доступа

Компьютеры под управлением всех поддерживаемых версий Windows, могут устанавливать удаленные подключения и выполнять удаленные команды в Windows PowerShell без предварительной конфигурации. Тем не менее, для получения соединения, и разрешения пользователям создавать локальные или удаленные сессии управления с помощь Windows PowerShell («сессии PSSession») и выполнять команды на локальном компьютере, необходимо включить удаленное взаимодействие Windows PowerShell на компьютере.

В Windows Server 2012 и более новых выпусках Windows Server удалённое взаимодействие включено в Windows PowerShell по умолчанию. Если настройки были изменены, можно восстановить настройки по умолчанию, выполнив командлет Enable-PSRemoting.

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

Удаленное взаимодействия Windows PowerShell поддерживаются службой WinRM, которая является реализацией Microsoft протокола управления веб-службами(WS-Management). При включении удаленного взаимодействия Windows PowerShell, изменяется конфигурация по умолчанию WS-Management и добавляется конфигурация системы, которая позволит пользователям подключаться к WS-Management.

Чтобы настроить Windows PowerShell для получения удаленных команд:
1. Запустите Windows PowerShell с параметром «Запуск от имени администратора».
2. В командной строке введите:

Enable-PSRemoting

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

New-PSSession

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

C:\PS> new-pssession

Id Name        ComputerName    State    ConfigurationName
-- ----        ------------    -----    -----
1  Session1    localhost       Opened   Microsoft.PowerShell

Если команда не сработала, рекомендуется прочитать, about_Remote_Troubleshooting.

Определение политики

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

Перед тем как установить соединение действует политика локального компьютера. Когда произошло соединение действует политика на удалённом компьютере.

]]>
https://coolcode.ru/powershell-o-trebovaniyah-k-inrastrukture-dlya-rabotyi-distantsionnogo-podklyucheniya-about_remote_requirements/feed/ 0
PowerShell. Об отложенных сессиях (about_Remote_Disconnected_Session) https://coolcode.ru/powershell-o-otlozhennyih-sessiyah-about_remote_disconnected_session/ https://coolcode.ru/powershell-o-otlozhennyih-sessiyah-about_remote_disconnected_session/#comments Tue, 08 Dec 2015 08:26:34 +0000 http://coolcode.ru/?p=5300

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

Функции отложенных сессий доступны, только если на компьютере к которому подключаются удаленно установлен Windows PowerShell 3.0 или более поздняя версия.

Функции отложенных сессий позволяют закрыть сеанс, в котором была создана PSSession, или закрыть консоль Windows PowerShell, или даже выключить компьютер, не нарушив работу команд запущенных в PSSession. Это особенно полезно для выполнения команд выполнение которых занимает продолжительное время. Это увеличивает запас времени на выполнение команд и предоставляет гибкий механизм для нужд ИТ-специалистов.

ПРИМЕЧАНИЕ: Нельзя отключаться от интерактивной сессии, которая началась с помощью командлета Enter-PSSession.

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

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

 

Командлеты отложенных сессий

Следующие командлеты поддерживают функции отложенных сессий:
Disconnect-PSSession: Отключает от PSSession.
Connect-PSSession: Подключается к отложенной PSSession.
Receive-PSSession: Возвращает результаты команд, которые выполнялись во время отключения от сесси.
Get-PSSession: Возвращает PSSession, на локальном компьютере или на удаленных компьютерах.
Invoke-Command: С использованием параметр InDisconnectedSession этот командлет создает PSSession и сразу отключается от неё.

 

Как работает функция отложенных сессий

Начиная с Windows PowerShell 3.0 сессии PSSession не зависят от сеансов в которых они создаются. Активная PSSession поддерживается на удаленном компьютере или на стороне сервера, даже если сеанс в котором была создана PSSession закрыт, и даже если компьютер был выключен или отключен от сети.

В Windows PowerShell 2.0, PSSession закрывалась на удаленном компьютере, когда сеанс в котором она была создана отключается от PSSession.

При отключении от PSSession, PSSession остается активной и поддерживается на удаленном компьютере. Сессия изменяет состояние из Running в Disconnected. К сессии в состоянии Disconnect можно подключиться из текущего сеанса или с другого сеанса на том же компьютере, или с другого компьютера. Удаленный компьютер, который будет поддерживать сессию должен быть запущен и подключен к сети.

Команды в отключенной PSSession продолжают работать на удаленном компьютере, пока команды не завершатся или пока буфер вывода не переполнится. Чтобы предотвратить приостановку выполнения команд при заполнении буфера вывода необходимо использовать параметр OutputBufferingMode в командлетах Disconnect-PSSession, New-PSSessionOption, или New-PSTransportOption.

Отложенные сессии поддерживаются в отключенном состоянии на удаленном компьютере. Они доступны для восстановления, пока не удалить PSSession, например, с помощью командлета Remove-PSSession, или пока в PSSession не истечёт время ожидания после  отключения. Можно настроить время ожидания в PSSession с помощью параметров IdleTimeoutSec или IdleTimeout в командлетах Disconnect-PSSession, New-PSSessionOption, или New-PSTransportOption.

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

 

Как получить объект PSSession.

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

Чтобы получить объекты сессий PSSession на локальном компьютере или удаленных компьютерах, используйте параметры ComputerName или ConnectionURI. Без параметров Get-PSSession получает объекты PSSession, созданные в локальном сеансе независимо от того, к какому серверу они подсоединены.

Так же, что бы получить объект PSSession, можно указать компьютер на котором она работает, то есть сервер.

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

Следующая последовательность команд показывает, как работает командлет Get-PSSession.

Первая команда создает сессию с компьютером Server01. Сессия находится на компьютере Server01.

PS C:\ps-test> New-PSSession -ComputerName Server01

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 2 Session2        Server01        Opened        Microsoft.PowerShell     Available

Чтобы получить сессию, надо использовать параметр ComputerName в командлете Get-PSSession со значением Server01.

PS C:\ps-test> Get-PSSession -ComputerName Server01

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 2 Session2        Server01        Opened        Microsoft.PowerShell     Available

Если значение параметра ComputerName в Get-PSSession указывает на локальный компьютер, Get-PSSession получает объекты PSSession которые работают и поддерживаются на локальном компьютере. И не получит сессии PSSession с компьютером Server01, даже если они были запущенны с локального компьютера.

PS C:\ps-test> Get-PSSession -ComputerName localhost
PS C:\ps-test>

Чтобы получить сессии, которые были созданы в текущем сеансе, надо использовать командлет Get-PSSession без параметров. Эта команда получит сессии PSSession, которые был создан в текущем сеансе, в том числе и подключенную к компьютеру Server01.

PS C:\ps-test> Get-PSSession

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 2 Session2        Server01        Opened        Microsoft.PowerShell     Available

 

Как отключиться от сессии

Чтобы отключиться от PSSession надо воспользоваться командлетом Disconnect-PSSession. Чтобы указать конкретную PSSession используется параметр Session или можно передать объекты PSSession по конвейеру из командлетов New-PSSession, Get-PSSession, или Disconnect-PSSession.

Следующая команда отключает PSSession с компьютером Server01. Обратите внимание, что свойство State имеет свойство Disconnected, а свойство Availability имеет статус None.

PS C:\> Get-PSSession -ComputerName Server01 | Disconnect-PSSession

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 2 Session2        Server01        Disconnected  Microsoft.PowerShell          None

Для создания сессии в состоянии Disconnected, можно воспользоваться параметром InDisconnectedSession в командлете Invoke-Command. Командлет при этом создаст сеанс, начнёт выполнять команду, и сразу отключиться, до того, как команда вернёт какой либо ответ.

Следующая команда выполняет команду Get-WinEvent в сессии с состоянием Disconnected на удаленном компьютере Server02.

PS C:\> Invoke-Command -ComputerName Server02 -InDisconnectedSession `
        -ScriptBlock {Get-WinEvent -LogName "Windows PowerShell"}

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 4 Session3        Server02        Disconnected  Microsoft.PowerShell          None

 

Как подключиться к отложенной сессии

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

Можно создать PSSession, выполнить команды в PSSession, отключиться от PSSession, закрыть Windows PowerShell, и выключить компьютер. Через несколько часов, можно войти в другой компьютер, получить PSSession, подключиться к ней, и получить результаты команд, которые выводились в PSSession в то время как она находилась в состоянии Disconnected. Затем можно запустить несколько команд в этой же сессии.

Для подключения к PSSession в состоянии Disconnected используется командлет Connect-PSSession. Для указания PSSession можно воспользоваться параметрами ComputerName или ConnectionURI, или передать объекты PSSession по конвейеру из командлета Get-PSSession.

Следующая команда получает сессии работающие на компьютере Server02. Результом будет две отключенные сессии, обе из которых доступны.

PS C:\> Get-PSSession -ComputerName Server02

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 2 Session2        juneb-srv8320   Disconnected  Microsoft.PowerShell          None
 4 Session3        juneb-srv8320   Disconnected  Microsoft.PowerShell          None

Следующая команда подключается к Session2. PSSession теперь открыта и доступна.

PS C:> Connect-PSSession -ComputerName Server02 -Name Session2


Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 2 Session2        juneb-srv8320   Opened        Microsoft.PowerShell     Available

 

Как получить результаты

Чтобы получить результаты команд, которые выводились во время того, как PSSession находилась в состоянии Disconnected, необходимо воспользоваться командлетом Receive-PSSession.

Можно использовать Receive-PSSession в дополнение или вместо командлета Connect-PSSession. Если сессия уже переподсоединилась и находиться в состоянии Opened, Receive-PSSession получает результаты команд, которые выводились, когда сеанс был в состоянии Disconnected. Если PSSession по-прежнему находится в состоянии Disconnected, Receive-PSSession подключается к нему, и получает результаты команд, которые выводились во время дисконнекта.

Receive-PSSession может возвращать результаты команд в виде объекта задания (асинхронно) или непосредственно с хоста на котором выполняется сессия (синхронно). Используя параметр OutTarget можно выбрать job или host. По умолчанию выбирается значение host. Если команда началась в текущем сеансе в качестве job, оно возвращается как job по умолчанию.

Следующая команда использует командлет Receive-PSSession, для подключения к PSSession на компьютере Server02 и получения результатов командлета Get-WinEvent, который выполняется в сессии Session3. Команда использует параметр OutTarget, чтобы получить результаты в виде job.

PS C:\> Receive-PSSession  -ComputerName Server02 -Name Session3 -OutTarget Job

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
3      Job3            RemoteJob       Running       True            Server02

Чтобы получить результаты задания, можно воспользоваться командлетом Receive-Job.

PS C:\ps-test> Get-Job | Receive-Job -Keep


     ProviderName: PowerShell

TimeCreated             Id LevelDisplayName Message     PSComputerName

-----------             -- ---------------- -------     --------------

5/14/2012 7:26:04 PM   400 Information      Engine stat Server02

5/14/2012 7:26:03 PM   600 Information      Provider "W Server02

5/14/2012 7:26:03 PM   600 Information      Provider "C Server02

5/14/2012 7:26:03 PM   600 Information      Provider "V Server02

 

Состояние и доступность

Свойства состояния и доступности в отключенной PSSession показывают доступна ли сессия для подключения к ней.

Когда PSSession подключена к текущему сеансу, её состояние Opened и доступность Available. При отключении от PSSession, состояние PSSession Disconnected, и его доступность имеет значение None.

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

Чтобы определить, можно ли подключиться к PSSession, используется свойство доступности (Availability). Состояние свойства Availability — None означает, что вы можете подключиться к сессии. Значение Busy означает, что вы не можете подключиться к PSSession, потому что она связана с другим сеансом.

В следующем примере запущено две сессии (в разных консолях Windows PowerShell) на одном компьютере. Значение Статуса и доступности в каждом сеансе изменяют значения в зависимости от того подключена сессия или нет.

#Session 1:
PS C:\> New-PSSession -ComputerName Server30 -Name Test

Id Name       ComputerName    State         ConfigurationName     Availability
-- ----       ------------    -----         -----------------     ------------
1  Test       Server30        Opened        Microsoft.PowerShell     Available

#Session 2:
PS C:\> Get-PSSession -ComputerName Server30 -Name Test

Id Name       ComputerName    State         ConfigurationName     Availability
-- ----       ------------    -----         -----------------     ------------
1 Test        Server30        Disconnected  Microsoft.PowerShell          Busy



#Session 1
PS C:\> Get-PSSession -ComputerName Server30 -Name Test | Disconnect-PSSession

Id Name       ComputerName    State         ConfigurationName     Availability
-- ----       ------------    -----         -----------------     ------------
 1 Test       Server30        Disconnected  Microsoft.PowerShell          None

#Session 2
PS C:\> Get-PSSession -ComputerName Server30

Id Name       ComputerName    State         ConfigurationName     Availability
-- ----       ------------    -----         -----------------     ------------
 1 Test       Server30        Disconnected  Microsoft.PowerShell          None



#Session 2
PS C:\> Connect-PSSession -ComputerName Server01 -Name Test

Id Name       ComputerName    State         ConfigurationName     Availability
-- ----       ------------    -----         -----------------     ------------
3 Test        Server30        Opened        Microsoft.PowerShell     Available

#Session 1
PS C:\> Get-PSSession -ComputerName Server30

Id Name       ComputerName    State         ConfigurationName     Availability
-- ----       ------------    -----         -----------------     ------------
 1 Test       Server30        Disconnected  Microsoft.PowerShell          Busy

 

Время простоя

Отложенные сессии поддерживаются на удаленном компьютере, пока вы их не удалите, например, с помощью командлета Remove-PSSession, или после истечения времени простоя. Свойство IdleTimeout в PSSession определяет, как долго отложенная сессия будет простаивать, прежде чем она будет удалена.

Сессии PSSession простаивают, когда «heartbeat thread» не получает никакого ответа. При отключении от сессии создаётся простой и начинает отсчитываться время, даже если команды по-прежнему работают в отложенной сессии. Windows PowerShell считает отложенные сессии активными, но в состоянии простоя.

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

Свойство конфигурации сессий IdleTimeoutMs определяет время простоя по умолчанию, которое используются при конфигурации сессий. Можно переопределить значение по умолчанию, но значение, которое задаётся не может превышать значение свойства MaxIdleTimeoutMs конфигурации сеанса.

Чтобы узнать значение свойств конфигурации сеанса IdleTimeoutMs и MaxIdleTimeoutMs, используется следующий формат команд.

Get-PSSessionConfiguration | Format-Table Name, IdleTimeoutMs, MaxIdleTimeoutMs

Значение по умолчанию в конфигурации сеанса можно переопределить и установить тайм-аут простоя из PSSession при создании PSSession и когда вы отключаетесь.

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

ЗАМЕТКИ:

Значение времени простоя конфигураций сеансов и опций сеансов в миллисекундах. Значение времени простоя сессий и параметры конфигурации сессий в секундах.

Можно установить время простоя из PSSession при создании PSSession (New-PSSession, Invoke-Command), и когда происходит отключение от сессии(Disconnect-PSSession). Тем не менее, нельзя изменить значение IdleTimeout при подключении к PSSession (Connect-PSSession) или при получении результатов из сессии (Receive-PSSession).

Командлеты Connect-PSSession и Receive-PSSession имеют параметр SessionOption, который принимает объекты SessionOption. Их возвращает командлет New-PSSessionOption. Тем не менее, значение IdleTimeout в объекте SessionOption и значение IdleTimeout в переменных $PSSessionOption не изменяют значение свойства IdleTimeout в PSSession при выполнении команд Connect-PSSession или Receive-PSSession.

Чтобы создать сеанс PSSession с определенным значением времени простоя, надо изменить привилегированную переменную $PSSessionOption, и установить значение свойства IdleTimeout до нужного значения (в миллисекундах).

При создании сеанса PSSession, значения в привилегированной переменной $PSSessionOption имеют приоритет над значениями в конфигурации сеанса.

Например, эта команда устанавливает время простоя 48 часов.

PS C:\> $PSSessionOption = New-PSSessionOption -IdleTimeoutMSec 172800000

Чтобы создать сеанс PSSession с определенным значением времени простоя, используется параметр IdleTimeoutMSec командлета New-PSSessionOption. Затем значение переменной передаётся в параметр SessionOption, в командлет New-PSSession или Invoke-Command.

Значения устанавливающиеся при создании сеанса имеют приоритет над значениями, заданными в привилегированной переменной $PSSessionOption и конфигурации сеанса.
Например:

PS C:\> $o = New-PSSessionOption -IdleTimeoutMSec 172800000
PS C:\> New-PSSession -SessionOption $o

Чтобы изменить время простоя из PSSession при отключении, используется параметр IdleTimeoutSec в командлете Disconnect-PSSession.

Например:

PS C:\> Disconnect-PSSession -IdleTimeoutSec 172800

Чтобы создать конфигурацию сеанса с заданным или максимальным временем простоя, используются параметры IdleTimeoutSec или MaxIdleTimeoutSec командлета New-PSTransportOption. Затем надо воспользоваться параметром передачи значении TransportOption командлета Register-PSSessionConfiguration.

Например:

PS C:\> $o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
PS C:\> Register-PSSessionConfiguration -Name Test -TransportOption $o

Чтобы изменить время простоя по умолчанию или максимальное время простоя в конфигурации сессии, используйется параметры IdleTimeoutSec и MaxIdleTimeoutSec командлета New-PSTransportOption. Затем опция TransportOption командлета Set-PSSessionConfiguration.
Например:

PS C:\> $o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
PS C:\> Set-PSSessionConfiguration -Name Test -TransportOption $o

 

Режим работы буфера вывода

Режим работы буфера вывода в PSSession определяет поведение PSSession при заполнении буфера вывода.

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

Допустимые значения:

Block: При заполнении буфера вывода, выполнение команд приостанавливается до тех пор, пока буфер не освободится.
Drop: Когда буфер вывода полон, выполнение продолжается. При этом старая информация удаляется, а новая записывается.

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

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

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

Чтобы посмотреть значение OutputBufferingMode конфигурации сеанса, используется следующий формат команды.

(Get-PSSessionConfiguration <ConfigurationName>).OutputBufferingMode

или

Get-PSSessionConfiguration | Format-Table Name, OutputBufferingMode

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

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

Чтобы создать сессию PSSession с режимом работы буфера вывода в состоянии Drop, можно изменить привилегированную переменную $PSSessionOption, в которой установить свойство OutputBufferingMode в значении Drop.

При создании сессии PSSession, значения в переменной $PSSessionOption имеют приоритет над значениями в конфигурации сеанса.

Например:

PS C:\> $PSSessionOption = New-PSSessionOption -OutputBufferingMode Drop

Чтобы создать сессию PSSession в режиме работы буфера вывода в состоянии Drop, можно использовать параметр OutputBufferingMode со значением Drop командлета New-PSSessionOption. Затем передать значения в параметр SessionOption командлетов New-PSSession или Invoke-Command.

Значения установленные при создании сессии имеют приоритет над значениями, заданными в привилегированной переменной $PSSessionOption и конфигурации сеанса.

Например:

PS C:\> $o = New-PSSessionOption -OutputBufferingMode Drop
PS C:\> Connect-PSSession -Cn Server01 -Name Test -SessionOption $o

Чтобы изменить режим работы буфера вывода в PSSession при отключении, можно использовать параметр OutputBufferingMode командлета Disconnect-PSSession.
Например:

PS C:\> Disconnect-PSSession -OutputBufferingMode Drop

Чтобы изменить режим работы буфера вывода в PSSession при повторном подключении, можно использовать параметр OutputBufferingMode командлета New-PSSessionOption для создания параметра сессии со значением Drop. Затем, передать полученные значение в параметр SessionOption командлетов Connect-PSSession или Receive-PSSession.

Например:

PS C:\> $o = New-PSSessionOption -OutputBufferingMode Drop
PS C:\> Connect-PSSession -Cn Server01 -Name Test -SessionOption $o

Чтобы создать конфигурацию сеанса с режимом работы буфера вывода по умолчанию в состоянии Drop, используйте параметр OutputBufferingMode в командлете New-PSTransportOption для создания объекта с опцией транспорта в значении Drop. Затем передайте значение в параметр TransportOption командлета Register-PSSessionConfiguration.

Например:

PS C:\> $o = New-PSTransportOption -OutputBufferingMode Drop
PS C:\> Register-PSSessionConfiguration -Name Test -TransportOption $o

Чтобы изменить режим работы буфера вывода в конфигурации сессии по умолчанию, используется параметр OutputBufferingMode в командлете New-PSTransportOption для создания транспорта со значением Drop. Затем необходимо передать значение в опцию SessionOption в командлете Set-PSSessionConfiguration.

Например:

PS C:\> $o = New-PSTransportOption -OutputBufferingMode Drop
PS C:\> Set-PSSessionConfiguration -Name Test -TransportOption $o

 

Локальные отложенные сессии

«Loopback sessions» или «local sessions» являются сессиями PSSession которые начинаются и заканчиваются на одном и том же компьютере. Как и другие PSSession активированные по сети локальные сессии поддерживают удаленное подключение (с локальным компьютером), так что вы можете отключаться и подключаться к локальной сессий.

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

Тем не менее, если вы используете параметр EnableNetworkAccess в командлетах New-PSSession, Enter-PSSession или Invoke-Command, то локальная сессия создается с интерактивным маркером безопасности. Интерактивный маркер безопасности позволяет использовать команды, которые работают в локальной сессии, и получают данные с других компьютеров.

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

 

Ожидание заданий в отложенных сессиях

Командлет Wait-Job ждёт, пока работа команд не будет завершена, после этого отображает командную строку или выполняется следующая команда. По умолчанию Wait-Job отвечает, если сессия в которой задание выполняется отключена. Чтобы командлет Wait-Job ждал пока сесия не переподключиться (в открытом состоянии), используется параметр Force. Для получения дополнительной информации см Wait-Job.

 

Надёжность сессий и непреднамеренное разъединение

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

При непреднамеренном отключении сессия PSSession может перейти в состояние Broken или Closed, но она также может быть в состоянии Disconnected. Если значени сессии State в состоянии Disconnected, то для управления сессией можно использовать те же методы, как если бы сессия была отключена намеренно. Например, можно использовать командлет Connect-PSSession чтобы подключиться к сессии и командлет Receive-PSSession, чтобы получить результат команд, которые выводились во время, когда сеанса был отключен.

Если закрыть или выйти из сеанса в котором была создана PSSession, в то время как команды в PSSession работают, Windows PowerShell будет поддерживать PSSession в состоянии Disconnected на удаленном компьютере. Если закрыть или выйти из сеанса в котором была создана PSSession, но ни одна из команд не работала в PSSession, Windows PowerShell не будет пытаться сохранить PSSession.

]]>
https://coolcode.ru/powershell-o-otlozhennyih-sessiyah-about_remote_disconnected_session/feed/ 2
PowerShell. О удалённом подключении (about_Remote) https://coolcode.ru/powershell-o-udalyonnom-podklyuchenii-about_remote/ https://coolcode.ru/powershell-o-udalyonnom-podklyuchenii-about_remote/#respond Thu, 03 Dec 2015 11:00:22 +0000 http://coolcode.ru/?p=5293

С помощью PowerShell можно выполнить удаленные команды, как на одном компьютере, так и на нескольких компьютерах. Использовать как временное, так и постоянное подключение. Можно так же запустить интерактивный сеанс с одним удаленным компьютером.

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

Примечание: Для использования Windows PowerShell Remoting, локальные и удаленные компьютеры должны быть настроены на удаленное взаимодействие. Для получения дополнительной информации см about_Remote_Requirements.

 

Как начать интерактивный сеанс (ENTER-PSSESSION)

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

Чтобы начать интерактивный сеанс, используйте командлет Enter-PSSession.

Следующая команда начинает интерактивный сеанс с компьютером Server01:

Enter-PSSession Server01

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

Server01 \ PS>

Теперь можно вводить команды на компьютере Server01.
Чтобы завершить интерактивный сеанс, надо ввести:

Exit-PSSession

Для получения дополнительной информации см Enter-PSSession.

Как работать с командлетами, которые имеют параметр ComputerName для дистанционного получения данных

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

Поскольку эти командлеты не используют WS-Management на базе Windows PowerShell Remoting, вы можете использовать параметр ComputerName этих командлетов на любом компьютере под управлением Windows PowerShell. Компьютеры могут быть не настроены для работы Windows PowerShell Remoting, и компьютеры могут не отвечать требованиям к системам для удаленного доступа.

Ниже приведён список командлетов имеющих параметр ComputerName:
Clear-EventLog
Get-Counter
Get-EventLog
Get-HotFix
Get-Process
Get-Service
Get-WinEvent
Get-WmiObject
Limit-EventLog
New-EventLog
Remove-EventLog
Restart-Computer
Stop-Computer
Show-EventLog
Test-Connection
Write-EventLog

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

Get-Service -ComputerName Server01

Обычно командлеты, поддерживающие удаленную работу без специальной настройки, имеют параметр ComputerName и не имеют параметра Session. Чтобы отобразить эти командлеты надо выполнить следующую команду:

Get-Command | where { $_.Parameters.Keys -contains "ComputerName" -and $_.Parameters.Keys -NotContains "Session"}

 

Как запустить команды удалённо

Для запуска команд, не поддерживающих параметр ComputerName, на удаленных компьютерах. Можно использовать командлет Invoke-Command.

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

Например, следующая команда выполняет команду Get-Culture на компьютере Server01.

Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture}

Параметр ComputerName предназначен для ситуаций, в которых выполняется одна команда или несколько несвязанных команд, на одном или нескольких компьютерах. Чтобы установить постоянное подключение к удаленному компьютеру, надо использовать параметр Session.

Как создать постоянное соединение (PSsession)

При использовании параметра ComputerName и командлета Invoke-Command, оболочка Windows PowerShell устанавливает подключение только для данной команды. Затем, когда команда завершена, оболочка закрывает соединение. Любые переменные или функции, которые были определены в команде, будут потеряны.

Чтобы создать постоянное подключение к удаленному компьютеру, надо воспользоваться командлетом New-PSSession. Например, следующая команда создает сеансы PSSession на компьютерах Server01 и Server02, а затем сохраняет эти сеансы в переменной $s.

$s = New-PSSession -ComputerName Server01, Server02

Как выполнять команд в PSsession

Воспользовавшись PSSession, можно запустить серию удаленных команд, которые будут иметь одно общее окружение. И соответственно иметь общий доступ к таким данным, как функции, псевдонимы и значения переменных. Для запуска команды в PSSession, используется параметр Session в командлете Invoke-Command.

Например, следующая команда использует командлет Invoke-Command для выполнения командлета Get-Process в сеансах PSSession $s на компьютерах Server01 и Server02. Команда сохраняет процессы в переменной $р в каждом из сеансов PSSession.

Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}

Так как PSSession использует постоянное подключение, вы можете запустить другую команду в той же сессии PSSession, в которой уже задана переменная $р. Следующая команда подсчитывает количество процессов, сохраненных в переменной $р.

Invoke-Command -Session $s -ScriptBlock {$p.count}

 

Как запустить удалённые команды на нескольких компьютерах

Для запуска удаленной команды на нескольких компьютерах, необходимо ввести все имена компьютеров в значении параметра ComputerName командлета Invoke-Command. Разделите имена компьютеров запятыми.

Например, следующая команда запускает команду Get-Culture на трех компьютерах:

Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}

Можно так же запустить команду в нескольких сеансах PSSession. Следующие команды создают сеансы PSSession на компьютерах Server01, Server02, Server03 и затем выполняется команда Get-Culture в каждом из сеансов.

$s = New-PSSession -ComputerName Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Get-Culture}

Чтобы указать в списке компьютеров локальный компьютер надо ввести имя локального компьютера, точку (.) или localhost.

Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}

 

Как запустить скрипт на удаленных компьютерах

Чтобы запустить скрипт с локального компьютера, на удаленных компьютерах, надо использовать параметр FilePath командлета Invoke-Command.
Например, следующая команда запускает сценарий sample.ps1 на компьютерах S1 и S2:

Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1

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

 

Как остановить удалённые команды

Чтобы прервать команду, надо нажать «CTRL» + «C». Запрос прерывания передастся на удаленный компьютер и завершит работу удаленного управления.

]]>
https://coolcode.ru/powershell-o-udalyonnom-podklyuchenii-about_remote/feed/ 0
PowerShell. О операторах (about_Operators) https://coolcode.ru/powershell-o-operatorah-about_operators/ https://coolcode.ru/powershell-o-operatorah-about_operators/#respond Wed, 02 Dec 2015 09:09:23 +0000 http://coolcode.ru/?p=5285

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

Арифметические операторы

Арифметические операторы (+, -, *, /,%) используются для вычисления значения в командах или выражениях. С помощью этих операторов можно складывать, вычитать, умножать, делить и вычислить модуль остатка от деления.

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

Для получения дополнительной информации см about_Arithmetic_Operators.

Операторы присваивания

Операторы присваивания (=, + =, — =, * =, / =,% =) используются , для присваивания одного или нескольких значений переменной, для изменения значения переменной и добавления значений переменной. Также переменной можно присвоить любой тип данных Microsoft .NET Framework, такие как String или DateTime, или Process.

Для получения дополнительной информации см about_Assignment_Operators.

Операторы сравнения

Операторы сравнения (-and, -or, -xor, -not, !) используются для сравнения значений и проверки условий. Например, вы можете сравнить два строковых значения, чтобы определить, равны ли они.

Операторы сравнения включают операторы соответствия (-match, -notmatch), которые находят шаблоны, используя регулярные выражения; Оператор замены (-replace), который использует регулярные выражения, чтобы изменить входные значения;
операторы подобия(-like, -notlike), которые находят шаблоны, используя групповые символы (*); и операторы проверки членства(-in, -notin, -contains, -notcontains), которые определяют, содержится ли значение в опорном наборе.

Они также включают в себя битовые операторы (-bAND, -bOR, -bXOR, -bNOT), для работы с битовыми значениями.

Для получения дополнительной информации см about_Comparison_Operators

Логические операторы

Логические операторы (-and, -or, -xor, -not, !) используются, для объединения булевых операций в единое логическое выражение. Например, можно используя логический оператор -and создать объект фильтра с двумя различными условиями.

Для получения дополнительной информации см about_Logical_Operators.

Операторы перенаправления

Операторы перенаправления (>, >>, 2>, 2>, и 2> & 1) используются для того, чтобы перенаправить вывод команды или выражения в текстовый файл. Операторы перенаправления работают как командлет Out-File (без параметров), но они также позволяют перенаправить вывод ошибок в указанные файлы. Вы также можете использовать Tee-Object данный командлет перенаправит вывод.

Для получения дополнительной информации см about_Redirection.

Операторы разединения и слияния

Оераторы -split и -join делят и объединяют подстроки. -split разбивает строку на подстроки. -join объединяет несколько строк в одну строку.

Для получения дополнительной информации см about_Split и about_Join.

Операторы типа

Операторы типа (-is, -isnot, -as) используются для того, чтобы найти или изменить тип .NET Framework объекта.

Для получения дополнительной информации см about_Type_Operators.

Унарные операторы

Унарные операторы увеличивают или уменьшают значения переменных или свойств объекта, и задают целым чиселам положительное или отрицательное значение. Например, чтобы увеличить значение переменной $а с 9 до 10, можно использовать следующую конструкцию: $a++.

Специальные операторы

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

 

@() Оператор переопределения в Массив

Возвращает один или несколько значений, в виде массива.
Если есть только один элемент, массив имеет только одного члена.

@(Get-WMIObject Win32_LogicalDisk)

 

& Оператор вызова

Выполняет команду, скрипт или блок скрипта. Оператор вызова, также известный как «invocation operator», позволяет запускать команды, которые хранятся в переменных и представлены строками. Поскольку оператор вызова не анализирует команду, он не интерпретирует параметры команды.

C:\PS> $c = "get-executionpolicy"
C:\PS> $c
get-executionpolicy

C:\PS> & $c
AllSigned

 

[] Оператор перезаливки

Преобразует или пределывает объект в заданный тип. Если объекты не может быть преобразован, Windows PowerShell выдаёт ошибку.

[datetime]$birthday = "1/20/88"
[int64]$a = 34

 

, Оператор запятая

Как бинарный оператор(если элементов операции больше одного), запятая создает массив. При унарной операции(если элемент один), запятая создает массив с одним элементом. Для этого надо поместите запятую перед объектом.

$myArray = 1,2,3
$SingleArray = ,1

 

(. ) Точка оператор источников

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

. c:\scripts.sample.ps1

 

Примечание: После оператора точка следует пробел. Надо использовать пробел, чтобы отличить оператор точку от символом точки (.), который указывает на текущий каталог.

В следующем примере скрипт sample.ps1 в текущем каталоге выполняется в текущей области окружения.

. .\sample.ps1

 

-f оператор формата

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

C:\PS> "{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello 3.14

 

[] Оператор индекса

Выбор элементов в индексированных коллекциях, таких как массивы и хэш-таблицы. Индексы массива начинаются с нуля, поэтому первый объект индексируется как [0]. В массивах, можно использовать отрицательные индексы, чтобы получить элемент с конца массива([-1] последний элемент массива, [-2] предпоследний элемент массива). Хэш-таблицы индексируются значениями ключа.

C:\PS> $a = 1, 2, 3
C:\PS> $a[0]
1
C:\PS> $a[-1]
3
C:\PS> (get-hotfix | sort installedOn)[-1]
C:\PS> $h = @{key="value"; name="Windows PowerShell"; version="2.0"}
C:\PS> $h["name"]
Windows PowerShell
C:\PS> $x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
C:\PS> $x["doc"]
intro
-----
Once upon a time...

 

| («pipe»)Оператор конвеера

Перенаправляет («pipes») выходные данные команды дальше по конвееру на следующую за ней команду. Когда в исходящих данных более чем один объект («collection»), оператор конвейера передает объекты по одному.

get-process | get-member
get-pssnapin | where {$_.vendor -ne "Microsoft"}

. пересылка на свойства оператора.
Доступ к свойствам и методам объекта.
$myProcess.peakWorkingSet
(get-process PowerShell).kill()

 

.. Оператор диапазон

Создаёт последовательность целых чисел, как массив целых чисел, с заданными верхней и нижней границей.

1..10
10..1
foreach ($a in 1..$max) {write-host $a}

 

:: Оператор статических членов

Вызов статических свойств и методов из класса в .NET Framework. Чтобы найти статические свойства и методы объекта, используйте параметр Static командлета Get-Member.

[datetime]::now

 

$() Оператор подвыражения

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

$($x * 23)
$(Get-WMIObject win32_Directory)

 

]]>
https://coolcode.ru/powershell-o-operatorah-about_operators/feed/ 0
PowerShell. О массивах (about_Arrays) https://coolcode.ru/o-massivah-about_arrays/ https://coolcode.ru/o-massivah-about_arrays/#comments Tue, 01 Dec 2015 09:23:05 +0000 http://coolcode.ru/?p=5274

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

Создание и инициализация массива

Чтобы создать и инициализировать массив, нужно присвоить несколько значений переменной.
Значения, хранящиеся в массиве, разделяются запятой(,) и отделены от имени переменной оператором присваивания (=).
Например, чтобы создать массив с именем $A, который содержит семь числовых (INT) значения 22, 5, 10, 8, 12, 9, и 80, надо ввести:

$A = 22,5,10,8,12,9,80

 

Также можно создать и инициализировать массив, используя оператор диапазона (..). Например, чтобы создать и инициализировать массив с именем $B, который содержит значения с 5 по 8, необходимо ввести следующую конструкцию:

$B = 5..8

 

В результате $B будет содержать четыре значения: 5, 6, 7 и 8.

Если тип данных не задан, Windows PowerShell создает массив как массив объектов (тип: System.Object []). Чтобы узнать тип данных массива, используйте метод GetType(). Например, чтобы узнать тип данных массива $a, выполните:

$a.GetType()

 

Чтобы создать типизированный массив, то есть массив, который может содержать только значения определенного типа, надо задайть тип массива, например, String[], long[] или int32[]. Чтобы задать тип массива, перед именем переменной массива в квадратных скобках укажите тип. Например, чтобы создать массив содержащий 32-битные целые числа с именем $IA, содержащий четыре числа (1500, 2230, 3350, и 4000), выполните:

[Int32[]] $ia = 1500,2230,3350,4000

 

В результате массив $IA будет содержать только целые числа.

Можно создавать массивы, которые поддерживают любой из типов платформы Microsoft .NET Framework. Например, объекты которые отдаёт Get-Process представляют собой процессы типа System.Diagnostics.Process. Чтобы создать типизированный массив объектов процессов, введите следующую команду:

[Diagnostics.Process []] $ZZ = Get-Process

 

Оператор переопределения в массив (@)

Оператор переопределения(@) создает массив, даже если он не содержит элементов или содержит только один объект.

Синтаксис оператора массива выглядит следующим образом:
@(…)

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

$а = @("Один")
$a.Count
1

$b = @()
$b.Count
0

 

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

$р = @(Get-Process notepad)

 

Для получения более подробной информации об операторе переопределения в массив, см about_Operators.

 

Чтение массива

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

$a

 

К элементам массива можно обратиться с помощью индекса, начиная с 0. Заключая число в скобках. Например, чтобы отобразить первый элемент массива $a, надо ввести:

$а[0]

 

Для отображения третьего элемента массива $a, надо ввести:

$а[2]

 

Отрицательные числа, в индексе массива, обзначают осчёт от конца массива. Например, «-1» обозначает последний элемент массива. Для отображения последних трех элементов массива, типа:

$а[-3..- 1]

 

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

$а[0..- 2]

 

Эта команда не отображает все элементы массива кроме последнего. Она отображает первый, последний, и предпоследний элемент в массиве. Т.е эквивалентна:
$а[0,- 2,-1]

Можно использовать оператор диапазона для отображения подмножество значений в массиве. Например, чтобы отобразить элементы данных с индексами от 1 до 3, надо ввести:

$а[1..3]

 

Можно использовать оператор плюс (+), чтобы объединить диапазоны элементов в задании индексов массива. Например, чтобы отобразить элементы с индексами 0, 2 и с 4 по 6, надо ввести:

$а[0,2 + 4..6]

 

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

$a.Count

Чтобы обратиться к элементам массива, можно так же использовать циклические операторы, например ForEach. Для того, чтобы пройтись по всему массиву $a и отобразить все его элементы, введите следующую конструкцию:

foeach ($element in $a){$element}

Оператор цикла Foreach проходит по всем элементам массива $a и возвращает каждое значение элемента массива в переменную $element, пока не достигнит конца массива.

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

for ($i = 0; $i -le ($a.length - 1); $i += 2) {$a[$i]}

 

While можно использовать для прохода по массиву пока не нарушаются указанные условия. Например, чтобы отобразитьпервые 4 элемента в массиве $a, необходимо написать:

$i=0
while($i -lt 4) {$a[$i]; $i++}

 

Просмотр свойств массива

Чтобы посмотреть свойства и методы массива, например для получения длины массива(Length) или метод для установки значения элемента в массиве (SetValue), используйте параметр InputObject командлета Get-Member.

При передаче массива по конвееру в командлет Get-Member, Windows PowerShell отправляет объекты по одному и Get-Member возвращает тип каждого элемента в массиве. Например:

$a|Get-Member

 

При использовании параметра InputObject, Get-Member возвращает свойства массива.
Например, следующая команда получает свойства массива $a:

Get-Member -InputObject $a

 

Вы также можете получить свойства массива, набрав запятую (,) перед его обозначением и передав по конвееру в командлет Get-Member. Запятая конвертирует массив, как значение содержащееся в другом массиве с одним элементом. Так Windows PowerShell передаёт по контейнеру массивы по одному за раз и этот элемент является массивом, то Get-Member возвращает свойства массива.

,$а|Get-Member

,(1,2,3)|Get-Member

 

Работа с массивами

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

Чтобы изменить значение конкретного элемента массива, нужно указать имя массива и индекс элемента, который надо изменить, а затем использовать оператор присваивания (=), чтобы указать новое значение для элемента. Например, чтобы изменить значение второго элемента (индекс элемента 1) в массиве $a на значение 10 , необходимо написать:

$a[1] = 10

 

Можно так же изменить значение используя метод массива — SetValue. В следующем примере изменяется значение второго элемента (индекс 1) массива $a на 500:

$a.setValue (500,1)

 

Можно использовать оператор +=, чтобы добавить элемент в массив. Когда вы используете его, Windows PowerShell на самом деле создает новый массив со значениями исходного массива и добавленными элементами. Например, чтобы добавить элемент со значением 200 в массив $a, надо ввести:

$а += 200

 

Удалить элементы из массива не просто, но вы можете создать новый массив, который содержит только выбранные элементы существующего массива. Например, чтобы создать массив $t со всеми элементами в массиве $a за исключение элемента с индексом 2, надо выполнить следующий скрипт:

$t = $а[0,1 + 3..($a.length-1)]

 

Чтобы объединить два массива в один массив, используйте оператор плюс (+). В следующем примере создается два массива, и объединяеются в третий, а затем отображает полученный объединенный массив.

$x = 1,3
$y = 5,9
$z = $x + $y
$z

 

В результате массив $z содержит элементы со значениями: 1, 3, 5 и 9.

Чтобы удалить массив, надо присвоить значение $null к массиву. Следующая команда удаляет массив в переменной $a.

$а=$NULL

 

Можно так же использовать командлет Remove-Item, но назначать значение $null быстрее, особенно для больших массивов.

 

Массивы нулевой длинны и из одного элемента

Начиная с Windows PowerShell 3.0, коллекции из нуля объектов или из одного объекта имеют свойства Count и Length. Кроме того, вы можете получить индекс из массива одного объекта. Эти функции помогут избежать ошибок сценариев, когда команда которая ожидает массив, получает менее двух элементов.

Следующие примеры демонстрируют эти функцию.

Нет объектов:

$a = $null
$a.Count
0
$a.Length
0

 

Один объект:

$a = 4
$a.Count
1
$a.Length
1
$a[0]
4
$a[-1]
4

 

]]>
https://coolcode.ru/o-massivah-about_arrays/feed/ 1
Поиск групп по шаблону с консоли. 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