RDSH терминальная ферма Как посмотреть кому принадлежат диски профиля пользователя на Windows Server 2012 R2 / 2016 RDS

На ферме RDS ферме используем для профилей пользователей виртуальные диски.

RDSH терминальная ферма Как посмотреть кому принадлежат диски профиля пользователя на Windows Server 2012 R2 / 2016 RDS

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

$UPDShare = $args[0]
$fc = new-object -com scripting.filesystemobject
$folder = $fc.getfolder($UPDShare)
"Username,SiD" >> export.csv
foreach ($i in $folder.files)
{
  $sid = $i.Name
  $sid = $sid.Substring(5,$sid.Length-10)
  if ($sid -ne "template")
  {
    $securityidentifier = new-object security.principal.securityidentifier $sid
    $user = ( $securityidentifier.translate( [security.principal.ntaccount] ) )
    $user,$i.Name -join "," >> export.csv
  }
}
$a = Import-Csv export.csv
$a

запускать

.\ShowUPDFolderDetails E:\UserProfileDisks

Результат

RDSH терминальная ферма Как посмотреть кому принадлежат диски профиля пользователя на Windows Server 2012 R2 / 2016 RDS

 

Как сбросить терминальные сессии на терминальной ферме RDS windows 2012-2016 без прав администратора

Задача дать поддержке права для сброса сессии с фермы терминалов RDS.

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

Назавём её Terminal Servers Administrators

Теперь делаем скрипт и добавляем в него наши хосты фермы и группу которую сделали

$Group = "domen\Terminal Servers Administrators"
$Servers = @(
   "Host-RDSH1", 
"Host-RDSH2",
"Host-RDSH3",
"Host-RDSH4",
"Host-RDSH5"
)
ForEach ($Server in $Servers) {
    #Делегируем право на теневые сессии
    $WMIHandles = Get-WmiObject `
        -Class "Win32_TSPermissionsSetting" `
        -Namespace "root\CIMV2\terminalservices" `
        -ComputerName $Server `
        -Authentication PacketPrivacy `
        -Impersonation Impersonate
    ForEach($WMIHandle in $WMIHandles)
    {
        If ($WMIHandle.TerminalName -eq "RDP-Tcp")
        {
        $retVal = $WMIHandle.AddAccount($Group, 2)
        
Читать далее

Как сбросить завсшию службу или когда она в состоянии стоп(stoped)

Проверим какие службы имеют статус stoped.

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}

Теперь выполним скрипт. Он выяснит какой процесс блокирует и убьёт его. После этого служба остановится.

$Services = Get-WmiObject -Class win32_service -Filter "state = 'stop pending'"
if ($Services) {
foreach ($service in $Services) {
try {
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
}
catch {
Write-Warning -Message " Error. Error details: $_.Exception.Message"
}
}
}
else {
Write-Output "No services with 'Stopping'.status"
}

 

Как найти в таблице sp_whoisactive по времени выполнения запроса.

SELECT [dd hh:mm:ss.mss]
,[start_time]
 ,[collection_time]
      ,[session_id]
      ,[sql_text]
      ,[sql_command]
      ,[login_name]
      ,[wait_info]
      ,[tran_log_writes]
      ,[CPU]
      ,[tempdb_allocations]
      ,[tempdb_current]
      ,[blocking_session_id]
      ,[reads]
      ,[writes]
      ,[physical_reads]
      ,[query_plan]
      ,[used_memory]
      ,[status]
      ,[tran_start_time]
      ,[open_tran_count]
      ,[percent_complete]
      ,[host_name]
      ,[database_name]
      ,[program_name]
      
      ,[login_time]
      ,[request_id]
      ,[collection_time]
  FROM [DBAtools].[dbo].[WhoIsActive]
  WHERE 
 CONVERT(CHAR(8),COLLECTION_time,8) BETWEEN '00:00:00' AND '23:00:00' AND
       datepart(YEAR,start_time) BETWEEN 2020 AND 2020 and
       datepart(month,start_time) BETWEEN 04 AND 04 and
       datepart(day,start_time) BETWEEN 22 AND 23
     and  [dd hh:mm:ss.mss]  > '00 01:00:00.0000'

 

Как снимать нагрузку c дисков с помощью zabbix. Iops. Windows Disk performance.

Задача снимать нагрузку на дисках на серверах.

У нас используется zabbix 4.2

Есть готовые шаблоны

https://share.zabbix.com/operating-systems/windows/windows-physical-drive-iops но проблема что этот шаблон не подходит под windows 2016. И править его сложно так как команды зашифрованы.

За основу взял https://share.zabbix.com/operating-systems/windows/windows-disk-performance. Но шаблон для 4.4.

Я взял шаблон windows-physical-drive-iops и его исправил для использования скрипта  из windows-disk-performance

Выкладываю сюда шаблон и скрипт

Windows iops 2016

Как снимать нагрузку c дисков с помощью zabbix. Iops. Windows Disk performance.

Как снимать нагрузку c дисков с помощью zabbix. Iops. Windows Disk performance.

Как делегировать права управления терминальных сессий не давая полные права на сервер в windows 2012/16

Задача дать поддержки права для сбрасывание . подключения к сессиям пользователя на ферме rdp . ферма развернута на базе windows 2016.

Создаём группу в АД Terminal Servers Administrators . Помещаем пользователей поддержки в эту группу.

Создаём группу MSK-HW-RDCB1 Users и добавляем в неё Terminal Servers Administrators.

После этого группу MSK-HW-RDCB1 добавляем на Remote Desktop Users (Пользователи удаленного рабочего стола ) на каждом сервере фермы и в колекцию

Как делегировать права управления терминальных сессий не давая полные права на сервер в windows 2012/16

Теперь выполним скрипт на каждом сервере в cmd от администратора

wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName ='RDP-Tcp')CALL AddAccount 'domen\Terminal Servers Administrators',2

или

$Group = "RDP_Operators"
$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)
ForEach 
Читать далее

Как узнать кто больше всего использует tempdb и сколько места занимает запрос в tempdb. полезные скрипты

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

SELECT
st.dbid AS QueryExecutionContextDBID,
DB_NAME(st.dbid) AS QueryExecContextDBNAME,
st.objectid AS ModuleObjectId,
SUBSTRING(st.TEXT,
dmv_er.statement_start_offset/2 + 1,
(CASE WHEN dmv_er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX),st.TEXT)) * 2
ELSE dmv_er.statement_end_offset
END - dmv_er.statement_start_offset)/2) AS Query_Text,
dmv_tsu.session_id ,
dmv_tsu.request_id,
dmv_tsu.exec_context_id,
(dmv_tsu.user_objects_alloc_page_count - dmv_tsu.user_objects_dealloc_page_count) AS OutStanding_user_objects_page_counts,
(dmv_tsu.internal_objects_alloc_page_count - dmv_tsu.internal_objects_dealloc_page_count) AS OutStanding_internal_objects_page_counts,
dmv_er.start_time,
dmv_er.command,
dmv_er.open_transaction_count,
dmv_er.percent_complete,
dmv_er.estimated_completion_time,
dmv_er.cpu_time,
dmv_er.total_elapsed_time,
dmv_er.reads,dmv_er.writes,
dmv_er.logical_reads,
dmv_er.granted_query_memory,
dmv_es.HOST_NAME,
dmv_es.login_name,
dmv_es.program_name
FROM sys.dm_db_task_space_usage dmv_tsu
INNER JOIN sys.dm_exec_requests dmv_er
ON (dmv_tsu.session_id = dmv_er.session_id AND dmv_tsu.request_id = dmv_er.request_id)
INNER JOIN sys.dm_exec_sessions dmv_es
ON (dmv_tsu.session_id = dmv_es.session_id)
CROSS APPLY sys.dm_exec_sql_text(dmv_er.sql_handle) st
WHERE (dmv_tsu.internal_objects_alloc_page_count + dmv_tsu.user_objects_alloc_page_count) > 0
ORDER BY (dmv_tsu.user_objects_alloc_page_count 
Читать далее

Как сделать групповую (GPO) политику для выключения пк при простои больше двух часов.

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

Как сделать групповую (GPO) политику для выключения пк при простои больше двух часов.

Содержание скриптов

poweroff.ps1

#
# This background job automatically locks your Workstation after a specified amount of
# time. It will come in handy if you cannot access the screensaver settings due to policy
# restriction but want to lock your screen after a idle timeout. Or you could just
# press [Win]+[L] everytime you leave your desk ;) .
#
# start with
# 	powershell.exe -windowstyle hidden -executionpolicy Unrestricted P:\ATH\TO\logoff.ps1
#
# `-windowstyle hidden` will make your PowerShell disappear/run in background
# `-executionpolicy Unrestricted` will enable this PowerShell process to 
Читать далее

Как установить get-cluster powershell.

Ошибка

The term ‘Get-Cluster’ 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.
+ CategoryInfo : ObjectNotFound: (Get-Cluster:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Установить

 Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
 Import-Module FailoverClusters