Войти

Показать полную графическую версию : [решено] Показать параметр 'описание'


Страниц : [1] 2

Arsenik77
30-05-2019, 08:40
Добрый день.
Как присвоить переменной значение 'описание' см. влож.
Стоят win10.

YuS_2
30-05-2019, 09:08
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
Отлично работает, но хотелось бы для узнать этот параметр у компьютеров находящихся в своей подсетки (не только локального).

Iska
30-05-2019, 09:38
Arsenik77, у командлета Get-WMIObject (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-wmiobject?view=powershell-5.1) есть параметр ComputerName.

Arsenik77
30-05-2019, 10:14
Вот так примерно
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
у компьютеров находящихся в своей подсетки »
для powershell, от имени админа:
icm -comp SRV1,SRV2,SRV3 -scr {(gwmi win32_operatingsystem|select description).description}

Iska
30-05-2019, 10:27
YuS_2, может, так даже и лучше. У Wbem иногда случаются совершенно невразумительные отказы при попытках сетевого взаимодействия.

YuS_2
30-05-2019, 11:03
Wbem иногда случаются совершенно невразумительные отказы при попытках сетевого взаимодействия »
Именно! А раз уж везде win 10, то подумалось так: зачем печку топить, когда есть центральное отопление. :)

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

YuS_2
30-05-2019, 11:21
Вот так примерно »
если таки надо в 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
YuS_2, в cmd это делается вызовом wmic.exe:
wmic OS SET Description='6 этаж'

YuS_2
30-05-2019, 12:45
вызовом wmic.exe »
Можно, конечно... да только:
подумалось так: зачем печку топить, когда есть центральное отопление. »
Потому что:
иногда случаются совершенно невразумительные отказы при попытках сетевого взаимодействия. »
а надо ведь ещё и:
хотелось бы для узнать этот параметр у компьютеров находящихся в своей подсетки (не только локального). »

Arsenik77
30-05-2019, 13:03
Появилась проблемка, не до конца показывается переменная 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
не до конца показывается переменная var, если есть пробел в описании то только до него показывается. »
До конца, до конца. Добавьте параметр "delims=" в цикл разбора по for /f.

Arsenik77
30-05-2019, 19:40
Не получилось запустить
если таки надо в cmd запускать именно, то: »
а свой вариант отрабатывает 52 компа и вылетает
Вот так примерно »

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

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

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

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

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

YuS_2
30-05-2019, 22:40
Не получилось запустить »
Проверяйте напрямую из 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}}
В общем, не всё так просто с безопасностью...

Ну а раз уж:
Нашел другой вариант решения 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
Вообщем из всех вариантов толком не работает ни один .
Остался последний вариант создание руками списка с помощью команды net view и выборка компьютера и "заметки с описанием" из этого файла.

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

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

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

Iska
31-05-2019, 13:33
создание руками списка »
Сделайте выборку из AD.

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

имена компьютеров простое K1, K2 .. K317 »
можно организовать цикл, генерирующий имена компьютеров:
for /l %%i in (1,1,317) do echo K%%i
- и использовать эти имена вместо списка...

Arsenik77
31-05-2019, 15:21
На самом деле получил много полезных вариантов. :)
Просто выбрал самый простой и рабочий


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
и рабочий »
ой ли ...
for /f %%i in ("%pc%;") do »
при наличии пробела в %pc% опять же получите бяку

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

\\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




© OSzone.net 2001-2012