Param(
[Parameter(Position=0)]
[ValidateSet("Logon","Logoff","Unknown")]
[string]$Status="Unknown"
)
#no spaces in the filter
[adsisearcher]$searcher="samaccountname=$env:username"
#find the current user
$find = $searcher.FindOne()
#get the user object
[adsi]$user = $find.Path
#define a string to indicate status
$note= @("{0} {1} to {2}" -f (Get-Date),$status.ToUpper(),$env:computername)
[array]$NewVals = @()
$NewVals = try {
($user.GetEx('url'))[0..10]
}
catch {
@()
}
$newVals += $note
#DEBUG, output values in ISE
#$NewVals | out-host
#update the user property
$user.PutEx(2, 'url', $NewVals )
#commit the change
$user.SetInfo()
#DEBUG, output values in ISE
#$user.GetEx('url')
foreach ($Computer in $Computers) {
$Computer = $Computer.toupper()
$Isonline = "OFFLINE"
$Status = "SUCCESS"
Write-Verbose "Working on $Computer"
if((Test-Connection -ComputerName $Computer -count 1 -ErrorAction 0)) {
$Isonline = "ONLINE"
Write-Verbose "`t$Computer is Online"
} else { Write-Verbose "`t$Computer is OFFLINE" }
try {
$account = [ADSI]("WinNT://$Computer/Administrator,user")
$account.psbase.invoke("setpassword",$pwd1_text)
Write-Verbose "`tPassword Change completed successfully"
}
catch {
$status = "FAILED"
Write-Verbose "`tFailed to Change the administrator password. Error: $_"
}
$obj = New-Object -TypeName PSObject -Property @{
ComputerName = $Computer
IsOnline = $Isonline
PasswordChangeStatus = $Status
}
$obj | Select ComputerName, IsOnline, PasswordChangeStatus
if($Status -eq "FAILED" -or $Isonline -eq "OFFLINE") {
$stream.writeline("$Computer `t $isonline `t $status")
}
}
Microsoft поддерживает общее число процессоров выданных виртуальным машинам в 8 раз больше чем общее число логических процессоров у гипервизора. для VDI это число равно 12.
cls
#Подгрузка библиотек
Add-pssnapin Quest.ActiveRoles.ADManagement
# Указываем путь в АД к каталогу где находятся УЗ юзеров.
$Catalog = "домен.ru/УЗ"
$UsersShara = "Где создаем новую папку пользователя"
$OffUsersShara = "Куда перемещаем папку удаленного пользователя"
$DirectoryName = $null
# Отправляем в конвеер включеных юзеров и отбираем тех у которых поле Факс пустое
Get-QADUser -SearchRoot $Catalog -Enabled | Where-Object {$_.Fax -eq $null} |
# Прописывает в поле Факс символ *
ForEach-Object {$_.Fax = *
# Составляет имя для личной папки пользователя
$DirectoryName = $_.DisplayName + "(" + $_.LogonName + ")"
# собираем конечный путь в директорию и создаем ее.
$UserDirectory = New-Item $UsersShara -Name $DirectoryName
# Помещаем настройки безопасности в переменую
$SecuritySeting = get-acl $UserDirectory
# Указывае пользователя для назначения прав
$identityReference = [System.Security.Principal.NTAccount] "$_.NTAccountName"
# Указываем права для пользователя
$fileSystemRights = [System.Security.AccessControl.FileSystemRights] 'FullControl'
# Указываем или ставим None нужно ли применять эти настройки к подпапкам и файлам.
$inheritanceFlags = [System.Security.AccessControl.InheritanceFlags] 'ContainerInherit,ObjectInherit'
# Указываем к кому применять ли свойства к самому каталогу и подкаталогам вложеных каталогов.
$propagationFlags = [System.Security.AccessControl.PropagationFlags] 'InheritOnly'
# Указываем разрешаем или запрещаем.
$accessControlType = [System.Security.AccessControl.accessControlType] 'Allow'
# Создаем объект настройки безопасности содержащий все наши настройки
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($identityReference,
$fileSystemRights, $inheritanceFlags, $propagationFlags, $accessControlType)
# Добовляем наш объект к существующим настройкам.
$SecuritySeting.addAccessRule($rule)
# Записываем новые настройки безопасности к папке.
Set-Acl $UserDirectory -AclObject $SecuritySeting}
#
#
#Теперь расписываем перенос папок заблокированных пользователей.
# Отправляем в конвеер заблокированных юзеров и отбираем тех у которых поле Факс заполнено
Get-QADUser -SearchRoot $Catalog -Disabled | Where-Object {$_.Fax -eq $null} |
# Прописывает в поле Факс символ пустое значение
ForEach-Object {$_.Fax = $null
# Составляет имя как должна называться личная папка пользователя
$DirectoryName = $_.DisplayName + "(" + $_.LogonName + ")"
# собираем конечный путь в директорию
$UserDirectory = $UsersShara + "\" + $DirectoryName
# Перемещаем нашу папку в каталог для увольненых пользователей
Move-Item -Path $UserDirectory -Destination $OffUsersShara -Force
}