Показаны сообщения с ярлыком Windows 2003. Показать все сообщения
Показаны сообщения с ярлыком Windows 2003. Показать все сообщения

среда, 25 мая 2011 г.

Весьма занятная статья про фаловый сервер Windows 2003

http://www.xakep.ru/magazine/xs/063/034/1.asp

Неожиданно почерпнул для себя много нового в части Windows.

понедельник, 8 ноября 2010 г.

Галактики ERP пробный переезд с 32-битной платформы на 64-битную

Имели продакшн сервер HP DL 580G5, 32G RAM, и дисками с SAN, с одной базой Галактики ERP в двухуровневой архитектуре, размер базы без транзакционных журналов, но с журналом базы галактики составлял 70Гб, всё это было на Windows 2003 Enterprise 32bit + SQL 2005 Enterprise 2005 32-bit.

Подняли виртуальную машину Windows 2003 Standart 64-bit с достаточным объемом дискового пространства, поставили SQL 2005 64bit и обновили его до версии соответствующей версии SQL на продакшн сервере, после чего восстановили базу мастер и боевую базу, а также рабочий каталог галактики - клиентской части и support.

Далее был выкачан новый дистрибутив Галактики ERP(потом, как выяснилось - это было сделано зря, лучше бы использовали старый), поскольку мы ставили достаточно давно, а обновлений (patches) на ресурсные файлы за пару лет было накачено на ERP огромное множество, благо под цели тестирования есть ещё 2 тестовых сервера, где крутиться около 5 тестовых баз - клонов производственной, для тестирования различных обновлений (patches) и внедрения новых АРМов(автоматизированных рабочих мест).

После установки не хотел нормально вязаться NAP-сервер с SQL (оба располагались на одном сервере) и клиентская часть (обычно клиентскую шару располагают там же) тоже не пускалась. Симптомы были очень странными - служба работала, порт 1997 слушался (смотрели утилитой CurrPorts), но telnet на порт не цеплялся ))), А также не могли подключиться через "Менеджер серверов и служб "Галактики"" - видимо по той же причини, что и не могли подключиться по telnet:



При сравнении dll-файлов на продакшн и тестовом сервере, выяснилось, что на тестовом вообще нет версии у файлов, - заменили библиотеки с продакшн, после этого перезагрузив - всё заработало, без перезагрузки никак не обошлось. (да и Internet Explorer Enhanced Security Configuration тоже надо отключать - не любят они друг друга)

Теперь осталось дело за "МАЛЫМ" - проверить программистскую часть о чем и было попрошено программистов(по-проверять проводки и т.п.).

четверг, 22 июля 2010 г.

Вытаскивание информации из Active Directory по пользователям на WMI и WHS

Перед тем как выполнять скрипт необходимо поправить строку:
Str_LDAP= "LDAP://CN="& StrGroupName &",OU=ASU,OU=Contora,DC=corp,DC=domain,DC=ru"
под свои нужды.
Для выполнения скрипта в домене и сбора множественной информации привелегии не нужны, можно выполнять из-под рядового пользователя домена. Я бы сказал, что это шпионский скрипт )))
содержимое файла .vbs(работает из под Windows XP в доменах с уровнями домена и леса: Windows 2003, Windows 2008, Windows 2008 R2):

'***************************************************************
'Getting information about users from Active Directory
'***************************************************************
' НАЧАЛО ФРАГМЕНТА A
Dim objArgs, strGroupDN, StrGroupName, MyFileName1, Str_LDAP
set objArgs = WScript.Arguments
StrGroupName = "ALL Users"
Str_LDAP= "LDAP://CN="& StrGroupName &",OU=ASU,OU=Contora,DC=corp,DC=domain,DC=ru"
if objArgs.Count <> 1 then
Dim objRootDSE
set objRootDSE = GetObject("LDAP://RootDSE")
strGroupDN = Str_LDAP '& objRootDSE.Get("defaultNamingContext")
Else
strGroupDN = objArgs.Item(0)
end if
' КОНЕЦ ФРАГМЕНТА A
MyFileName1 = GetScriptDirectory & "Члены группы - " & StrGroupName & ".txt"
'***************************************************************
' НАЧАЛО ФРАГМЕНТА B
Dim dicSeenGroupMember
set dicSeenGroupMember = CreateObject("Scripting.Dictionary")
FuncAppendOneStrToTXTFile MyFileName1, "Members of " & strGroupDN & ":"
DisplayMembers strGroupDN, " ", dicSeenGroupMember
Wscript.Echo "Сбор данных о членах группы <" & StrGroupName & "> - завершен" & Chr(10) & "Отчет находится в файле " & MyFileName1 & Chr(10) & "The End"
' КОНЕЦ ФРАГМЕНТА B
'***************************************************************
'----------------функция----------------------------------------
Function DisplayMembers (strGroupADsPath, strSpaces, dicSeenGroupMember)

FuncAppendOneStrToTXTFile MyFileName1,"ФИО" & vbTab & "CanonicalName" & vbTab & "userPrincipalName" & vbTab & "LDAP" & vbTab & "OU Native" & vbTab & "phisicalDeliveryOfficeName" & vbTab & "Description" & vbTab & "Mail" & vbTab & "scriptPath" & vbTab & "homeDirectory" & vbTab & "homeDrive" & vbTab & "telephoneNumber" & vbTab & "homeMDB" & vbTab & "logonCount" & vbTab & "lastLogon" & vbTab & "whenCreated" & vbTab & "UserAccountControl" & vbTab & "badPwdCount" & vbTab & "badPasswordTime" & vbTab & "pwdLastSet" & vbTab & "msNPAllowDialin" & vbTab & "msRTCSIP-PrimaryUserAddress" & vbTab & "msRTCSIP-LineServer" & vbTab & "msRTCSIP-Line"
Dim objGroup, objMember, oG, Obj, UserObj
set objGroup = GetObject(strGroupADsPath)
for each objMember In objGroup.Members
FuncAppendOneStrToTXTFile MyFileName1, GetToFileOneCNFromAD(objMember.Get("distinguishedname"))
if objMember.Class = "group" then
if dicSeenGroupMember.Exists(objMember.ADsPath) then
Wscript.Echo strSpaces & " ^ already seen group member " & "(stopping to avoid loop)"
FuncAppendOneStrToTXTFile MyFileName1, strSpaces & " ^ already seen group member " & "(stopping to avoid loop)"
else
dicSeenGroupMember.Add objMember.ADsPath, 1
DisplayMembers objMember.ADsPath, strSpaces & " ", dicSeenGroupMember
end if
end if
Next
End Function
'----------------функция----------------------------------------
Function GetToFileOneCNFromAD(StrLDAP)
GetToFileOneCNFromAD = ""
'-------- результат запроса возвращаем в переменную oGroup
Set Obj = GetObject("LDAP://" & StrLDAP)
On Error Resume Next
OU_Native = Mid(Obj.ADsPath, InStr(1,Obj.ADsPath, "OU"))
if (Err.Number = 0) Then
OU_Native = Mid(Obj.ADsPath, InStr(1,Obj.ADsPath, "OU"))
Else
OU_Native = Obj.ADsPath
Err.Clear
End If
GetToFileOneCNFromAD = Mid(Obj.Name,4,Len(Obj.Name)-3) & vbTab & Obj.Name & vbTab & Obj.userPrincipalName & vbTab & Obj.ADsPath & vbTab & OU_Native & vbTab & Obj.physicalDeliveryOfficeName & vbTab & Obj.description & vbTab & Obj.mail & vbTab & Obj.scriptPath & vbTab & Obj.homeDirectory & vbTab & Obj.homeDrive & vbTab & Obj.telephoneNumber & vbTab & Obj.homeMDB & vbTab & Obj.logonCount & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.lastLogon) ) & vbTab & Obj.whenCreated & vbTab & Obj.UserAccountControl & vbTab & Obj.badPwdCount & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.badPasswordTime)) & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.pwdLastSet)) & vbTab & Obj.msNPAllowDialin & vbTab & GetSIPContact(Obj)
' GetToFileOneCNFromAD = Mid(Obj.Name,4,Len(Obj.Name)-3) & vbTab & Obj.Name & vbTab & Obj.userPrincipalName & vbTab & Obj.ADsPath & vbTab & OU_Native & vbTab & Obj.physicalDeliveryOfficeName & vbTab & Obj.description & vbTab & Obj.mail & vbTab & Obj.scriptPath & vbTab & Obj.homeDirectory & vbTab & Obj.homeDrive & vbTab & Obj.telephoneNumber & vbTab & Obj.homeMDB & vbTab & Obj.logonCount & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.lastLogon) ) & vbTab & Obj.whenCreated & vbTab & Obj.UserAccountControl & vbTab & Obj.badPwdCount & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.badPasswordTime)) & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.pwdLastSet)) & vbTab & GetSIPContact(Obj)
' GetToFileOneCNFromAD = Mid(Obj.Name,4,Len(Obj.Name)-3) & vbTab & Obj.Name & vbTab & Obj.userPrincipalName & vbTab & Obj.ADsPath & vbTab & Obj.physicalDeliveryOfficeName & vbTab & Obj.description & vbTab & Obj.mail & vbTab & Obj.scriptPath & vbTab & Obj.homeDirectory & vbTab & Obj.homeDrive & vbTab & Obj.telephoneNumber & vbTab & Obj.homeMDB & vbTab & Obj.logonCount & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.lastLogon) ) & vbTab & Obj.whenCreated & vbTab & Obj.UserAccountControl & vbTab & Obj.badPwdCount & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.badPasswordTime)) & vbTab & FuncConvertTimeStamp( FuncConvertTime(Obj.pwdLastSet)) & vbTab & GetSIPContact(Obj)
End Function
'----------------функция----------------------------------------
'---функция берет информацию об SIP свойствах учетных записей --
Function GetSIPContact( objUser)
On Error Resume Next
objUser.Get("msRTCSIP-PrimaryUserAddress")
if (Err.Number = 0) Then
SIPName=objUser.Get("msRTCSIP-PrimaryUserAddress") & vbTab & objUser.Get("msRTCSIP-LineServer") & vbTab & objUser.Get("msRTCSIP-Line")
MyResult = SIPName
Else
GetSIPContact = ""
Err.Clear
MyResult = vbTab & vbTab & vbTab
End If
GetSIPContact = MyResult

End Function
'----------------функция----------------------------------------
'добавляет строчку в текстовый файл
Function FuncAppendOneStrToTXTFile(FileName, StrText)
'------------------------Константы для задания типа открытия файла
Const ForReading = 1, ForWriting = 2, ForAppending = 8, OverwriteTrue = True, OverwriteFalse = False
' Объявляем переменные
Dim objFSO, FOut
' Создаем объект FileSystemObject
Set objFSO=WScript.CreateObject("Scripting.FileSystemObject")
' Открываем выходной файл для записи
Set FOut = objFSO.OpenTextFile (FileName,ForAppending,true)
' Записываем текстовую строку в файл
FOut.WriteLine StrText' & vbcrlf
' Закрываем выходной файл
FOut.Close
FuncAppendOneStrToTXTFile = true
End Function
'----------------функция----------------------------------------
'создает txt - файл 'файл не должен быть создан
Function FuncCreateTXTFile(FileName)
'------------------------Константы для задания типа открытия файла
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const OverwriteTrue = True, OverwriteFalse = False, UnicodeTrue = True, UnicodeFalse = False
Const ReadOnlyDeletionTrue = True, ReadOnlyDeletionFalse = False
' Объявляем переменные
Dim objFSO, FOut
' Создаем объект FileSystemObject
Set objFSO=WScript.CreateObject("Scripting.FileSystemObject")
' Открываем выходной файл для записи
Dim File
Set File = objFSO.CreateTextFile(FileName, OverwriteTrue,UnicodeFalse)
' Закрываем выходной файл
FuncCreateTXTFile = true
End Function
'----------------функция----------------------------------------
Function GetScriptDirectory()
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
GetScriptDirectory = Mid(WScript.ScriptFullName,1,Len(WScript.ScriptFullName)-Len(WScript.ScriptName))
End Function
'----------------функция----------------------------------------
'функция преобразует дату из числового формата в нормальный
Function FuncConvertTime(x)
Dim StrResult, objShell
' Получение настроек о зонах времени из регистра
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" & "TimeZoneInformation\ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngBias = 0
For k = 0 To UBound(lngBiasKey)
lngBias = lngBias + (lngBiasKey(k) * 256^k)
Next
End If
On Error Resume Next
Set objDate = x'lastLogon'lngDate
If Err.Number <> 0 Then
On Error GoTo 0
dtmDate = #1/1/1601#
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If lngLow <>
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0 ) Then
StrResult = #1/1/1601#
Else
StrResult = #1/1/1601# + (((lngHigh * (2 ^ 32)) + lngLow)/600000000 - lngBias)/1440
End If
End If
'WScript.Echo StrResult
FuncConvertTime = StrResult
End Function
'----------------функция----------------------------------------
'функция преобразует TimeStamp возвращенный функцией FuncConvertTime(x) в поддающийся сортировке TimeStamp
Function FuncConvertTimeStamp(x)
Dim y,z
y = ""
If ( Len(x)>0 ) Then
'проверка на наличие времени в TimeStamp
If (Len(x) > 11) Then
z = Mid(x,12,Len(x)-11)
End If
'преобразование TimeStamp
If Mid(x,13,1) = ":" Then
y = Mid(x,7,4) & "." & Mid(x,4,2) & "." & Mid(x,1,2) & " " & "0" & z
Else
y = Mid(x,7,4) & "." & Mid(x,4,2) & "." & Mid(x,1,2) & " " & z
End If
'y = Mid(x,7,4) & "." & Mid(x,4,2) & "." & Mid(x,1,2) & "." & Mid() & "." & Mid() & "." & Mid()
End If
FuncConvertTimeStamp = y
End Function


Конечно, теперь есть и другое решение:
http://shss.wordpress.com/2010/07/08/ad-add-telephone-numbers-using-excel-application-as-data-soutce/

просто мой скрипт писался, когда ещё не было Power Shell

вторник, 11 мая 2010 г.

Две операционки на машине Ubuntu 10.04 и Windows 2003 server

Под рукой был старенький Kraftway с двуми жесткими дисками 40G и 160G.
На диск 40G поставили win 2003 сервер
На диск 160G поставили Ubuntu 10.04 с одним разделом - "/", под свап ответили 1,5G
Загрузчик расположили на диске с Win.
Забэкапили раздел Ubuntu акронисом, на раздел с виндой, загрузились из-под винды и отформатили раздел с Ubuntu, после чего восстановили раздел с Ubuntu средстави акрониса, и нормально загрузились Ubuntu.
такой маленький тест получился восстанавлиемости средстави акрониса, правда, надо сказать, что по-началу мы под "/"-й раздел для Ubuntu отвели весь диск 160G, с Ext4 акронис True Image Ent Server Full отказался его бэкапить, ext3 не смог сжать до такой степени, что бы он смог уместить на 40G с виндой, хотя занятое пространство составляло менее 5Г. Пришлось изменить размер раздела под Ubuntu пакетом gpart со 160G до 10G загрузившись c LiveCD Ubuntu 10.04 - с то й же компашки.
Запланировали эксперемент с заменой дианных на дисках, т.е.:
1. форматим диск с Ubuntu
2. клонируем 40G на 160G
3.грузимся с Win - проверям работоспособность
4.восстанавливаем Ubuntu на винт 40G из образа акрониса .tib, раположенного на диске с виндой.
5.Грузимся с Ubuntu.

среда, 24 марта 2010 г.

Решение проблемы с аутентификацией Win9x на Windows 2008 R2 контроллерах домена

При обновление контроллеров домена с Windows 2003 до Windows 2008 R2.
Когда был введен первый контроллер домена с операционной системой Windows 2008 R2 (ракже роли DNS и WINS) обнаружилась пролема аутентификации Win9x компьютеров.
проблема возникла после того как новому контроллеру были переданы роли:
Domain naming master, RID pool manager
(можно посмотреть командой netdom query fsmo)
При попытке входа в домен на Win9x компьютерах выдвалась ошибка:
"Данный запрос не поддерживается сетью"
Раскопки в гугле и сравнение значений реестра наконтроллерах с разной ОС (2003 и 2008R2) привели к следующему решению:
ключи реестра на 2008R2 должны быть следующими:
Windows Registry Editor Version 5.00
[HKLM\SYSTEM\CurrentControlSet\Control\Lsa\]
"lmcompatibilitylevel"=dword:00000002
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0]
"Auth132"="IISSUBA"
"NtlmMinClientSec"=dword:00000000
"NtlmMinServerSec"=dword:00000000

Посмотреть здесь можно.

аналогичные изменения можно внести политикой:

Там же изменил параметры подписывания SMB:
Microsoft network client: Send unencripted password to third-party SMB servers
Microsoft network server: Digitally sign communications (always)
О которых можно почитать здесь.
После чего при входе на Win9x компьютерах (теперь вместо NET-BIOS обязательно нужно использовать полнодоменное имя ) стали выдаватся сообщения вида:
"пароль не опознан и одним из серверов", но при этом все сетевые ресурсы стали доступны.

Примечательно, что, если пользователю менять пароль, то он перестаёт мочь аутентифицироваться и ему не предоставляются сетевые ресурсы. Даже если на Win9x клиенте установлен dsclient v 5.0.2920.5.exe и 266772usa8.exe и 293793USA8.EXE. Как было сказано здесь.


Примечательно, что те пользователи, которые не меняли пароль могут заходить на машину без проблем, а новые - не могут этим похвастать. Версия Windows 98 SE по крайней мере.
Установил: Maximus Decim Cumulative Update - не помогло.
На контроллере домена, обнаружил следующую ошибку:
System
- Provider
[ Name] Microsoft-Windows-Security-Auditing
[ Guid] {54849625-5478-4994-A5BA-3E3B0328C30D}
EventID 4776
Version 0
Level 0
Task 14336
Opcode 0
Keywords 0x8010000000000000
- TimeCreated
[ SystemTime] 2010-03-26T10:50:21.265625000Z
EventRecordID 11209030
Correlation
- Execution
[ ProcessID] 532
[ ThreadID] 704
Channel Security
Computer DC.corp.mydomain.ru
Security
- EventData
PackageName MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
TargetUserName UserName
Workstation \\PCName
Status 0xc000006a
натолкнулся на неожиданное решение. Еще об этом.
Итак решение:
На Windows 98:
1. Установить IE6 SP1
2. Установить DSClient
На Windows 2008:
1. Создать параметр SMB2 (REG_DWORD) и установить в "0" путь HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters)
2. Создать параметр EnableRaw (REG_DWORD) и установить в "0" путь HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters
3. В локальных политиках - Параметры безопасности: Клиент сети Microsoft: использовать цифровую подпись (с согласия сервера) (Microsoft network client: Digitally sign communications (if server agrees) установить в "Включено"
4. Клиент сети Microsoft: использовать цифровую подпись (всегда) ( Microsoft network client: Digitally sign communications (always) установить в "Отключено"
5. Сервер сети Microsoft: использовать цифровую подпись (с согласия клиента) (Microsoft network server: Digitally sign communications (if server agrees)) установить в "Включено"
6. Сервер сети Microsoft: использовать цифровую подпись (всегда) (Microsoft network server: Digitally sign communications (always) установить в "Отключено"
7. Сетевая безопасность: уровень проверки подлинности LAN Manager установить "Отправлять только NTLM-ответ"
Как ни странно, это тоже не помогло...
Еще одну неприятность заметил - если прользователи не меняют пароль (у них в учетной записи выставлена галка не менять пароль), то у них никаких проблем, если же меняют (на другой машине с ОС XP) или им сбрасывается пароль административно - то уже номально аутентифицироваться не могут на сетевых ресурсах доменной учеткой.

Пренос центра сертификации - ROOT Certification Authority

При обновлении контроллеров домена с Windows 2003 до Windows 2008 R2, контроллер домена на котором был расположен центр сртификации отказался понижатья до роли рядового сервера, пока с него не перенесут или не удалят центр сертификации.
По этому поводу нашел мануал:
Active Directory Certificate Services Upgrade and Migration Guide for Windows Server 2008
Благодаря которому удалось перенести центр сертификации c Windows 2003 на Windows 2008 R2 Server.