Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
на выход мы получаем не значение true, а целый набор данных— ожидаемое поведение для любого Get-Wtf. С ними прикольно другое, если объектов (пользователей) 2 и более, то командлет возвращает массив объектов. А если объект один, то возвращает сам объект (а не массив из одного объекта), ломая к чёртовой бабушке всю последующую логику. Рождаются костыли:
$shrimps = @()
$shrimps += Get-Shrimpsи дальше смело работаем как с массивом.Можно проще: $shrimps = @(Get-Shrimps)
Или вот так:
Get-Shrimps |% {
$shrimp = $_
# ...
}Честно говоря, не вяжется «неплохо разбираюсь в powershell» с откровениями про пайп (|)Я знал, что такое конвейер до написания этой статьи. Хотел максимально подробно разъяснить все детали, для тех пользователей, кто недавно начал работать с powershell. Но не учёл высокий уровень читателей Хабра и сейчас откровенно жалею за потраченное мной время на написание статьи.
С ними прикольно другое, если объектов (пользователей) 2В моих примерах везде явно задан конкретный пользовать. Поэтому возвращать будет либо информацию о конкретном пользователе, либо ошибку если пользователя в системе отсутсвует.
Get-LocalUser | Where-Object {$_.enabled -eq $false}
Function CreateNewUserMailbox($objUser, $MakeHidden, $mdb) {
$CreateNewUserMailbox = $False
$objUser.CreateMailbox($mdb)
$objUser.Put("msExchUserAccountControl", 0)
$objUser.SetInfo()
if ($MakeHidden) {
$objUser.Put("msExchHideFromAddressLists", $MakeHidden)
$objUser.SetInfo()
}
}
$userDN = (get-qaduser $userLogin).directoryentry.distinguishedname
$user = [adsi]"LDAP://$userDN"
$mdbName = "CN=Store1,CN=SG1,CN=InformationStore,CN=EXCH-01,CN=Servers,CN=Org,CN=Administrative Groups,CN=Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=example,DC=com"}
CreateNewUserMailbox $user $false $mdbNameif (Get-LocalUser 'admin' -ErrorAction SilentlyContinue) { Write-Host 'Есть пользователь'} else {Write-Host 'Нет пользователя' }$user="admin"
try
{
Get-LocalUser $user -ErrorAction Stop
write-host пользователь $user есть -foregroundcolor Green
}
Catch
{
if ($_.FullyQualifiedErrorId -eq "UserNotFound,Microsoft.PowerShell.Commands.GetLocalUserCommand")
{
write-host "Пользователь $User не найден" -foregroundcolor Red
}
else
{
Write-Error $_
}
}Тогда уж проще if (Get-LocalUser |? {$_.Name -eq $user}) написать.
$userName = "Admin"
if (-not (Get-LocalUser $userName -ErrorAction SilentlyContinue))
{
#Если У/З отсутствует, то будет создана
$pass = Read-Host "Inpur new password for $userName" -AsSecureString
New-LocalUser -Name $userName -Password $pass -UserMayNotChangePassword -PasswordNeverExpires
}
#Раз У/З есть (а если не было, то уже есть), то можем создать объект аккаунта, с ним удобнее
$Account = Get-LocalUser $userName
#Включаем аккаунт, если отключен
if (-not $Account.Enabled) { Enable-LocalUser $Account }
#Если аккаунт не входит в группу администраторов, то добавим
if (-not (Get-LocalGroupMember -Member $Account -SID S-1-5-32-544 -ErrorAction SilentlyContinue ))
{
Add-LocalGroupMember -SID S-1-5-32-544 -Member $Account
}
#Задаем параметры «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
Set-LocalUser $Account -PasswordNeverExpires $true -UserMayChangePassword $false
$ErrorActionPreference = 'SilentlyContinue'
$username = "Admin"
$AdminGroup = "S-1-5-32-544"
$getuser = Get-LocalUser $username
if ($getuser -eq $null)
{
$Password = Read-Host -AsSecureString
New-LocalUser -Name $username `
-PasswordNeverExpires `
-UserMayNotChangePassword `
-Password $Password
Add-LocalGroupMember -SID $AdminGroup -Member $username
}
else
{
Remove-LocalGroupMember -Member $username -SID $AdminGroup
Set-LocalUser -Name $username `
-PasswordNeverExpires $true `
-UserMayChangePassword $false `
-Password $Password
Add-LocalGroupMember -SID $AdminGroup -Member $username
Enable-LocalUser $username
}set-LocalUser admin -PasswordNeverExpires:$trueSet-LocalUser -Name admin -UserMayChangePassword $false$password = convertto-securestring "P@ssW0rD!" -asplaintext -force
Set-LocalUser -Name admin -Password $Password | Set-LocalUser -UserMayChangePassword $false
Некоторые особенности PowerShell при работе с учетными записями пользователей