Страница 2 из 3

Добавлено: Вт фев 22, 2011 22:44
Rodny
Flasher писал(а):Кстати, имя домена и имя компьютера не совпадают?
Нет.

Добавлено: Вт фев 22, 2011 22:51
Flasher
Ок. Ждём подтверждения. Один из образцов MVV кинул.

Добавлено: Чт фев 24, 2011 09:42
Batya
Flasher писал(а):На сервере LOGONSERVER отличается только наличием сдвоенного слэша спереди? У тебя так?
Нет. У меня всё одинаково. И на "Windows 7 Максимальная", и "Windows Server 2008" у LOGONSERVER впереди двойной слэш.
Rodny писал(а):на 2003: "LOGONSERVER=\\NetBIOS-имя_компьютера", "USERDOMAIN=имя_домена"
на XP: "LOGONSERVER=\\NetBIOS-имя_компьютера", "USERDOMAIN=NetBIOS-имя_компьютера"
А у меня такого нет.
на 7: "LOGONSERVER=\\Контроллер_домена", "USERDOMAIN=имя_домена"
на 2008: "LOGONSERVER=\\Контроллер_домена", "USERDOMAIN=имя_домена"

Вроде нашёл ключи реестра, по которым можно определиться:
Windows 7 писал(а):[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"InstallationType"="Client"
"EditionID"="Ultimate"
"ProductName"="Windows 7 Ultimate"
Windows 2008 Server писал(а):[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"ProductName"="Windows Server (R) 2008 Enterprise"
"EditionID"="ServerEnterprise"
Наличие "Server" в "ProductName" может служить критерием.

Добавлено: Чт фев 24, 2011 10:20
alexey65536
В обычной XP вообще нет ключей InstallationType и EditionID:) Тоже отличие:)

Добавлено: Чт фев 24, 2011 10:59
MVV
Самый надежный способ - написать утилитку на пару килобайт, которая будет ставить переменную окружения или код ошибки, позволяющий определить, серверная или нет - есть функция GetVersionEx, которая позволяет получить нужную информацию.

Вообще, автор топика просил различить XP и 2003 Server, для 7 и 2008 серверов могут быть различия. Также, думаю, различия могут быть в зависимости от того, подключена ли к домену рабочая станция с XP или нет. Но если вариант сравнения "%LOGONSERVER%"=="\\%USERDOMAIN%" подойдет - он будет простейшим.

Добавлено: Чт фев 24, 2011 12:55
Flasher
Batya писал(а):И на "Windows 7 Максимальная", и "Windows Server 2008" у LOGONSERVER впереди двойной слэш.
Я имел в виду отличается от USERDOMAIN. Ну, теперь уже вижу, что там у тебя.
MVV писал(а):Вообще, автор топика просил различить XP и 2003 Server, для 7 и 2008 серверов могут быть различия.
Где? В личке?
MVV писал(а):Но если вариант сравнения "%LOGONSERVER%"=="\\%USERDOMAIN%" подойдет - он будет простейшим.
Тут не получается, если машины объединены с сервером. Контроллер домена и имя домена не равны ведь.

Добавлено: Чт фев 24, 2011 13:28
MVV
Flasher писал(а):
MVV писал(а):Вообще, автор топика просил различить XP и 2003 Server, для 7 и 2008 серверов могут быть различия.
Где? В личке?
Ты прав, уточнения не было. Мне казалось, это автор отписывался о тестах на XP и 2003 серваке.

Добавлено: Чт фев 24, 2011 18:09
HA3APET
Batya
Спасибо.

Код: Выделить всё

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"InstallationType"="Client"
Думаю это, то что нужно

Теперь нужен батник.
Оцените такой, если, что подправьте

Код: Выделить всё

@echo off
echo ws=WScript.CreateObject("WScript.Shell");KeyPath="HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";ValueName="InstallationType"; > %TEMP%\0.js
echo try{Value=ws.RegRead(KeyPath+"\\"+ValueName);}catch(e){WScript.Quit(1);} >> %TEMP%\0.js
echo if (Value == "Server"){WScript.Quit(-1);}else{ WScript.Quit(0);} >> %TEMP%\0.js
cscript %TEMP%\0.js //B
set exitcode=%ERRORLEVEL%
del %TEMP%\0.js
if %exitcode%==0 ( 
 start "client.exe"
) else ( 
 start "server.exe"
)

Добавлено: Чт фев 24, 2011 18:15
MVV
Ну, думаю, так попроще будет:

Код: Выделить всё

@echo off
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallationType|find "Client">nul
if errorlevel 1 (
	echo server
) else (
	echo client
)
:)

Но должен заметить, что на XP этого параметра нет.

Добавлено: Чт фев 24, 2011 18:18
HA3APET
MVV
Точно! ))))
Спасибо

Добавлено: Чт фев 24, 2011 18:21
MVV
Думаю, так будет лучше:

Код: Выделить всё

@echo off 
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallationType|find "Server">nul 
if errorlevel 1 ( 
   echo client 
) else ( 
   echo server 
)
Отличие в том, что если параметр не найден, система считается клиентом, а не сервером.

Добавлено: Чт фев 24, 2011 18:31
HA3APET
MVV
Сейчас нет возможности проверить на серверной ОС
Но ставлю вручную Server или весь параметр удаляю, не важно тут
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"InstallationType"="Server"
Всё равно ваши и мой батник во всех случаях выдают client, где то я замкнул) Проверю завтра на серверной.

Добавлено: Чт фев 24, 2011 18:45
MVV
Я проверял на Windows 2008 Server R2, работает.

И на Windows 7 оба моих пишут server, если в InstallationType прописать Server.

Добавлено: Чт фев 24, 2011 18:51
Flasher
HA3APET
Не понял, а чему тут удивляться, что будет то, на что самостоятельно изменено значение? :) И зачем его менять вообще?

Добавлено: Чт фев 24, 2011 18:53
HA3APET
Flasher
Я писал, что наоборот от изменения значения результат скрипта один и тот же.
MVV
Спасибо за проверку, проверил на виртуалке (не дождался "завтра"), всё работает.