Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Показать параметр 'описание' (http://forum.oszone.net/showthread.php?t=340736)

Arsenik77 30-05-2019 08:40 2873669

Показать параметр 'описание'
 
Вложений: 1
Добрый день.
Как присвоить переменной значение 'описание' см. влож.
Стоят win10.

YuS_2 30-05-2019 09:08 2873675

Цитата:

Цитата Arsenik77
win10 »

powershell
Код:

$a = (gwmi win32_operatingsystem|select description).description
$a

cmd
Код:

@echo off
for /f %%i in ('powershell -nol -c "&{(gwmi win32_operatingsystem|select description).description}"') do set var=%%i
echo %var%


Arsenik77 30-05-2019 09:18 2873677

Отлично работает, но хотелось бы для узнать этот параметр у компьютеров находящихся в своей подсетки (не только локального).

Iska 30-05-2019 09:38 2873680

Arsenik77, у командлета Get-WMIObject есть параметр ComputerName.

Arsenik77 30-05-2019 10:14 2873686

Вот так примерно
for /f "delims=" %%i in ('powershell -nol -c "&{(gwmi -computername %KK% win32_operatingsystem).description}"') do set var=%%i
echo %var%

YuS_2 30-05-2019 10:23 2873689

Цитата:

Цитата Arsenik77
у компьютеров находящихся в своей подсетки »

для powershell, от имени админа:
Код:

icm -comp SRV1,SRV2,SRV3 -scr {(gwmi win32_operatingsystem|select description).description}

Iska 30-05-2019 10:27 2873690

YuS_2, может, так даже и лучше. У Wbem иногда случаются совершенно невразумительные отказы при попытках сетевого взаимодействия.

YuS_2 30-05-2019 11:03 2873702

Цитата:

Цитата Iska
Wbem иногда случаются совершенно невразумительные отказы при попытках сетевого взаимодействия »

Именно! А раз уж везде win 10, то подумалось так: зачем печку топить, когда есть центральное отопление. :)


PS
Кстати, сам не понял, зачем я в код засунул |select description, оно там излишне...

YuS_2 30-05-2019 11:21 2873708

Цитата:

Цитата Arsenik77
Вот так примерно »

если таки надо в cmd запускать именно, то:
Код:

@echo off
echo Administrative permissions required. Detecting permissions...

net session >nul 2>&1
if errorLevel 1 echo Failure: Current permissions inadequate.&pause&exit /b

for /f %%i in (
        'powershell -nol -c "&{icm -comp SRV1,SRV2,SRV3 -scr {(gwmi win32_operatingsystem).description}}"'
) do set var=%%i&call :out

pause&exit /b

:out
echo %var%
exit /b


Busla 30-05-2019 12:18 2873721

YuS_2, в cmd это делается вызовом wmic.exe:
Код:

wmic OS SET Description='6 этаж'

YuS_2 30-05-2019 12:45 2873726

Цитата:

Цитата Busla
вызовом wmic.exe »

Можно, конечно... да только:
Цитата:

Цитата YuS_2
подумалось так: зачем печку топить, когда есть центральное отопление. »

Потому что:
Цитата:

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

а надо ведь ещё и:
Цитата:

Цитата Arsenik77
хотелось бы для узнать этот параметр у компьютеров находящихся в своей подсетки (не только локального). »


Arsenik77 30-05-2019 13:03 2873731

Появилась проблемка, не до конца показывается переменная var, если есть пробел в описании то только до него показывается.
В моем варианте for /f %%i in ('powershell -nol -c "&{(gwmi -computername kkk win32_operatingsystem|select description).description}"') do set var=%%i
если локально то все нормально.

Iska 30-05-2019 13:14 2873735

Цитата:

Цитата Arsenik77
не до конца показывается переменная var, если есть пробел в описании то только до него показывается. »

До конца, до конца. Добавьте параметр "delims=" в цикл разбора по for /f.

Arsenik77 30-05-2019 19:40 2873804

Не получилось запустить
Цитата:

Цитата YuS_2
если таки надо в cmd запускать именно, то: »

а свой вариант отрабатывает 52 компа и вылетает
Цитата:

Цитата Arsenik77
Вот так примерно »

Нашел другой вариант решения net view \\имя компа , только не знаю как записать в переменную 3-ю строчку
Скрытый текст

C:\WINDOWS\system32>net view \\k140
Общие ресурсы на \\k140

УМКК;АБК;6 этаж;УИТ (Scada)

Имя общего ресурса Тип Используется как Комментарий

-------------------------------------------------------------------------------
slProject Диск
Команда выполнена успешно.

YuS_2 30-05-2019 22:40 2873818

Цитата:

Цитата Arsenik77
Не получилось запустить »

Проверяйте напрямую из powershell, но с учетом -ThrottleLimit, по умолчанию этот параметр равен 32
Цитата:

Specifies the maximum number of concurrent connections that can be established to run this command. If you omit this parameter or enter a value of 0, the default value, 32, is used.
Список машин не обязательно перечислять в строке, можно вынести в файл, а в строку запуска добавить чтение из файла:
Код:

icm -comp (gc machines.txt) -scr {(gwmi win32_operatingsystem).description}} -thrott 100
файл положить рядом со скриптом, а перечисление оформить по одной машине на строку...

А, да, совсем забыл, там ведь:
Цитата:

To create a PSSession or run commands on a remote computer, by default, the current user must be a member of the Administrators group on the remote computer. Credentials are sometimes required even when the current user is logged on to an account that is a member of the Administrators group.
и
Цитата:

If the current user is a member of the Administrators group on the remote computer, or can provide the credentials of a member of the Administrators group, use the Credential parameter of the New-PSSession, Enter-PSSession or Invoke-Command cmdlets to connect remotely.
Поэтому придется организовывать что-то вроде:
Код:

icm -comp SRV -cred SRV\Admin -scr {(gwmi win32_operatingsystem).description}}
В общем, не всё так просто с безопасностью...

Ну а раз уж:
Цитата:

Цитата Arsenik77
Нашел другой вариант решения net view \\имя компа , только не знаю как записать в переменную 3-ю строчку »

то можно так:
Код:

@echo off

for /f "delims=" %%a in ('type machines.txt') do set pc=%%a&call :out
pause&exit /b

:out
for /f "skip=2 delims=" %%b in ('net view \\%pc%') do set var=%%b&goto next
:next
echo %pc% - %var%
exit /b

machines.txt - список машин, по одной на строку

Arsenik77 31-05-2019 07:53 2873832

Вообщем из всех вариантов толком не работает ни один .
Остался последний вариант создание руками списка с помощью команды net view и выборка компьютера и "заметки с описанием" из этого файла.
Скрытый текст

C:\WINDOWS\system32>net view
Имя сервера Заметки

-------------------------------------------------------------------------------
\\K10 УМКК;АБК;7 этаж;Сбыт
\\K100 УМКК;АБК;6 этаж;УИТ

Примечание имена компьютеров простое K1, K2 .. K317
Основной батник запускаю в Windows Server 2012R2, а тестирую на Win10, поэтому получается тут работает , там не работает.

Iska 31-05-2019 13:33 2873873

Цитата:

Цитата Arsenik77
создание руками списка »

Сделайте выборку из AD.

YuS_2 31-05-2019 14:13 2873881

Цитата:

Цитата Arsenik77
из всех вариантов толком не работает ни один »

Если бы Вы хоть показали, что именно не работает, то возможно, Вам подсказали бы, как поправить... а так, лимит телепатии исчерпан пока, восполнить - проблематично. :)

Цитата:

Цитата Arsenik77
имена компьютеров простое K1, K2 .. K317 »

можно организовать цикл, генерирующий имена компьютеров:
Код:

for /l %%i in (1,1,317) do echo K%%i
- и использовать эти имена вместо списка...

Arsenik77 31-05-2019 15:21 2873892

На самом деле получил много полезных вариантов. :)
Просто выбрал самый простой и рабочий

Скрытый текст

for /f %%i in ("%pc%;") do (
findstr /c:%%i COMP.txt >tc.log
)
for /f "usebackq tokens=* delims=" %%a in ("tc.log") do (set var=%%~a)

где COMP.txt такого вида
Скрытый текст

\\K147;АБК;7 этаж;Лаборатория
\\K148;АБК;7 этаж;Сбыт
\\K150;АБК;6 этаж;ОТиЗ
и формируется командой net view и ручным редактированием




alpap 31-05-2019 16:34 2873898

Цитата:

Цитата Arsenik77
и рабочий »

ой ли ...
Цитата:

Цитата Arsenik77
for /f %%i in ("%pc%;") do »

при наличии пробела в %pc% опять же получите бяку

мне вообще интересно: Каким-то чуднЫм образом получаем COMP.txt, первой строкой кода не менее чуднЫм образом практически просто переписываем COMP.txt в tc.log, а вот зачем еще в переменную брать последнюю строку этого файла вообще неясно. Или это все нагромождение идет для одной строки относительно одного запроса, тогда где автоматизация, смысл тогда какой?
Arsenik77,
вам не это ли надо случайно?
COMP.txt

\\K147;АБК;7 этаж;Лаборатория
\\K148;АБК;7 этаж;Сбыт
\\K150;АБК;6 этаж;ОТиЗ

Код с запросом по имени компа, например: K148
Код:

@echo off
echo Введите имя компа:& set /p comp=
<COMP.txt (for /f "tokens=2* delims=\;" %%a in ('find "%comp%"') do @echo %%a;%%b)
pause

в переменную или другой файл так:
Код:

@echo off
echo Введите имя компа:& set /p comp=
:: В переменную
<COMP.txt (for /f "tokens=2* delims=\;" %%a in ('find "%comp%"') do set "var=%%a;%%b")
:: Запись в другой файл
<COMP.txt>file.txt (for /f "tokens=2* delims=\;" %%a in ('find "%comp%"') do @echo %%a;%%b)
pause


Arsenik77 01-06-2019 05:08 2873949

alpap, Замечательно! Именно то что нужно.


Время: 01:30.

Время: 01:30.
© OSzone.net 2001-