Как исправить ошибку Veeam Failed to call RPC function ‘PckgFind’

После установки нового сервера управления Veeam и перетаскивания на него серверов для бэкапов появилась ошибка . Discovering installed packages Error: Failed to call RPC function ‘PckgFind’

Как исправить ошибку Veeam Failed to call RPC function 'PckgFind'

Заходим на сервер на котором ошибка.

Так как у нас используется hyper-v server 2016. То будем удалять через Powershell.

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

Get-WmiObject Win32_Product | ft name,version,vendor,packagename

Как исправить ошибку Veeam Failed to call RPC function 'PckgFind'

Удаляем

Veeam Hyper-V Integration
Veeam Backup Transport

(Get-WmiObject Win32_Product -Filter "Name ='Veeam Backup Transport'").Uninstall()
(Get-WmiObject Win32_Product -Filter "Name ='Veeam Hyper-V Integration'").Uninstall()

После этого все установится.

Как сбросить зависшую сессию с rdp терминала. rds

# Сброс зависших сессий, добавьте в расписание на своем скрипт сервере
Function RDP_Resetfailure($server){
  $ts = qwinsta /server
  $td = ($ts | where { ($_ -like "*Disc*" -or $_ -like "*Диск*" -or $_ -like "*ЁбЄ*" ) -and $_ -notlike "*services*"})
  $tdselect = $td # Для отладки или внесения в лог: Login Id State
  $td = $td -ireplace ("[^0-9]","") # оставляем только id сессий
  for($i=0; $i -lt $td.Count; $i++){
    Write-Host Reset RDP Failture session ID: $td[$i] $tdselect[$i]      #отладка просмотр id сессий
    rwinsta $td[$i] /server           # сброс зависших сессий, раскомментируйте эту строку
  }
}

$server = "MyRDPServer"
RDP_Resetfailure($server)

 

Как подружить sharepoint с несколькими доменами. Трасты, лес домена.

Как добавить пользователей в sharepoint из другого домена.

Развернули новый домен и надо добавить группы пользователей в sharepoint из нового домена.

Зайдём на сервер sharepoint

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

Get-SPWebApplication

Узнаем url нашего sharepoint

Теперь команда для полного траста

tsadm -o setproperty -pn peoplepicker-searchadforests -pv "forest:MY-DOMAIN.local;forest:TRUSTED-DOMAIN.local;domain:MY-DOMAIN.local;domain:TRUSTED-DOMAIN.local" -url http://my-sp2013-site.com.au/

Для одного домена

STSADM.exe -o setproperty -propertyname peoplepicker-searchadforests -propertyvalue "domain:test.com;forest:uganda.com,uganda\user,123456" -url  http://sharepoint.com

Проверяем связь

STSADM.exe -o getproperty -propertyname peoplepicker-searchadforests -url http://sharepoint.com

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

Если лес или домен, где установлен SharePoint 2013, имеет одностороннее отношение доверия с другим лесом или доменом,

необходимо … Читать далее

Как завершить сессию на всех серверах в локальной сети.

Проблема при смене пароля на серверах остались отключенные сессии . Из-за этого блокируется учётная запись. Надо сессию завершить на всех серверах . но так как серверов больше 500 в ручную делать это негуманно к себе.

вот скрипт . Запускается от пользователя которого надо завершить

param (
        #get current logged on username
        [string]$UserName = $env:USERNAME
    )

    # Импортировать модуль Active Directory для Get-ADComputer CmdLet
    Import-Module ActiveDirectory


    # Запрос Active Directory для включенных учетных записей компьютеров серверов Windows и сортировка по имени
    $Servers = Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")} | Sort Name

    
# Инициирующие переменные
    $SessionList = $NULL
    
Читать далее

Как вывести список пользователей которые состоят в группе.

Задача вывести пользователей из определенной группы , но. Группа имеет в себе пользователей из разных лесов домена.

И по этому команда  Get-ADGroupMember «1c Base ZUP(Zup_TE)» не работает . пишет ошибка :

Get-ADGroupMember : Произошла неопределенная ошибка
строка:1 знак:1
+ Get-ADGroupMember "1c Base ZUP(Zup_TE)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (1c Base ZUP(Zup_TE):ADGroup) [Get-ADGroupMember], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember



Get-ADGroupMember : The operation completed successfully
At line:1 char:1
+ Get-ADGroupMember -Identity "1c Base ZUP(Zup_TE)" | foreach { Get-ADUser $_ -Pro ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (1c Base ZUP(Zup_TE):ADGroup) [Get-ADGroupMember], ADException
    + FullyQualifiedErrorId : The operation completed successfully,Microsoft.ActiveDirectory.Management.Commands.GetAD
   GroupMember

Пошел … Читать далее

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'