Скрипт определяющий серверная ОС или нет

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Flasher писал(а):Кстати, имя домена и имя компьютера не совпадают?
Нет.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ок. Ждём подтверждения. Один из образцов MVV кинул.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение 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" может служить критерием.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
alexey65536
Сообщения: 1056
Зарегистрирован: Пт янв 20, 2006 10:58
Откуда: Taganrog

Сообщение alexey65536 »

В обычной XP вообще нет ключей InstallationType и EditionID:) Тоже отличие:)
#199018
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Вообще, автор топика просил различить XP и 2003 Server, для 7 и 2008 серверов могут быть различия. Также, думаю, различия могут быть в зависимости от того, подключена ли к домену рабочая станция с XP или нет. Но если вариант сравнения "%LOGONSERVER%"=="\\%USERDOMAIN%" подойдет - он будет простейшим.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Batya писал(а):И на "Windows 7 Максимальная", и "Windows Server 2008" у LOGONSERVER впереди двойной слэш.
Я имел в виду отличается от USERDOMAIN. Ну, теперь уже вижу, что там у тебя.
MVV писал(а):Вообще, автор топика просил различить XP и 2003 Server, для 7 и 2008 серверов могут быть различия.
Где? В личке?
MVV писал(а):Но если вариант сравнения "%LOGONSERVER%"=="\\%USERDOMAIN%" подойдет - он будет простейшим.
Тут не получается, если машины объединены с сервером. Контроллер домена и имя домена не равны ведь.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):
MVV писал(а):Вообще, автор топика просил различить XP и 2003 Server, для 7 и 2008 серверов могут быть различия.
Где? В личке?
Ты прав, уточнения не было. Мне казалось, это автор отписывался о тестах на XP и 2003 серваке.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение 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"
)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение 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 этого параметра нет.
Последний раз редактировалось MVV Чт фев 24, 2011 18:18, всего редактировалось 1 раз.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

MVV
Точно! ))))
Спасибо
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Думаю, так будет лучше:

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

@echo off 
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallationType|find "Server">nul 
if errorlevel 1 ( 
   echo client 
) else ( 
   echo server 
)
Отличие в том, что если параметр не найден, система считается клиентом, а не сервером.
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

MVV
Сейчас нет возможности проверить на серверной ОС
Но ставлю вручную Server или весь параметр удаляю, не важно тут
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"InstallationType"="Server"
Всё равно ваши и мой батник во всех случаях выдают client, где то я замкнул) Проверю завтра на серверной.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Я проверял на Windows 2008 Server R2, работает.

И на Windows 7 оба моих пишут server, если в InstallationType прописать Server.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

HA3APET
Не понял, а чему тут удивляться, что будет то, на что самостоятельно изменено значение? :) И зачем его менять вообще?
HA3APET
Сообщения: 151
Зарегистрирован: Пн фев 22, 2010 05:43

Сообщение HA3APET »

Flasher
Я писал, что наоборот от изменения значения результат скрипта один и тот же.
MVV
Спасибо за проверку, проверил на виртуалке (не дождался "завтра"), всё работает.
Ответить