Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования. Часть 2

Автор: Etalon
Дата сообщения: 10.05.2007 11:55
А ты посмотри в установке и удалении программ
Изменилось что или нет
Автор: BULLDOG
Дата сообщения: 10.05.2007 12:00
Etalon
Пункт не удалился.
Автор: Etalon
Дата сообщения: 10.05.2007 12:14
Давай модифицируем сценарий

Код:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product ")
For Each objSoftware in colSoftware
If objSoftware.Caption = "Novell Client для Windows" Then
Result = objSoftware.Uninstall()
If Result = 0 Then
WScript.Echo "Программа успешно удалена"
End If
Else
WScript.Echo "Программа Novell Client для Windows на данном компьютере не устанолена"
End If
Next
Автор: ASV_2007
Дата сообщения: 10.05.2007 12:41
хто может помочь HEEEELP ME !!!

нужно нарисовать батник который бы делал выгрузку на фтп .....

хто может помочь ???
Автор: BULLDOG
Дата сообщения: 10.05.2007 13:10
Etalon

Программа Novell Client для Windows на данном компьютере не устанолен

А она есть...

Окно "Программа Novell Client для Windows на данном компьютере не устанолена" появляется 16 раз.

Добавлено:
А в этом скрипте менять ничего не нужно под себя?
Автор: Etalon
Дата сообщения: 10.05.2007 15:13
BULLDOG
Возможные причины:
1. Приложение уже удалено, но необходима перезагрузка
2. Поиск приложения, в данном сценарии, производится по свойству .Caption и надо знать точно знать чему оно равно для данного приложения. "Novell Client для Windows" я указал просто так в качестве примера.
Автор: BULLDOG
Дата сообщения: 10.05.2007 15:30
Etalon

Название правильное, другие проги тоже не удаляются.
Пробую под админом.
Автор: BULLDOG
Дата сообщения: 11.05.2007 08:11
Etalon

Пробовал дома, тоже не работает.

Добавлено:
Etalon

Выложи файл, пожалуйста, на ifolder.ru, другие популярные забанены. Может быть проблема при копировании текста скрипта со страницы (лишние пробелы, например).
Автор: SPV_Ed
Дата сообщения: 13.05.2007 14:17
Как можно в логон-скрипте пользователя указать перенаправление папки My Documents на сетевой ресурс?
Домена нет, комп Win 2000/XP в рабочей группе.

Добавлено:
ASV_2007
Аплоад по ФТП через штатный ftp.exe к примеру так

Код: @echo off
title Отправка файлов по FTP

set FTPAddr=85.233.x.x
set FTPUser=username
set FTPPwd=password
set TransferMode=binary
set OutDir=\FTPOut
set tmpfile=%TEMP%\cmdlst.txt

for %%a in (%OutDir%\*.*) do set FileExist=true
if not defined FileExist (
echo Нет файлов для отправки!
echo.
pause
goto :EOF
)

echo open %FTPAddr%> %tmpfile%
echo %FTPUser%>> %tmpfile%
echo %FTPPwd%>> %tmpfile%
echo prompt>> %tmpfile%
echo %TransferMode%>> %tmpfile%
echo lcd %OutDir%>> %tmpfile%
echo mput *>> %tmpfile%
echo bye>> %tmpfile%

if exist %tmpfile% (
ftp -s:%tmpfile%
del /q %tmpfile%
)
del /q %OutDir%\* >nul
Автор: BULLDOG
Дата сообщения: 14.05.2007 10:08
Etalon

Помоему я понял. Твоим способом можно удалить приложения, установленные при помощи *.msi файлов. Использующие другие инсталляторы программы удалить не получиться. Использовал WMI Code Creator. Там можно просмотреть все программы, которые выбираются по запросу For Each objSoftware... , не все отображаются.
Автор: Etalon
Дата сообщения: 14.05.2007 16:02
BULLDOG
Извини, не было времени ответить
Этим способом действительно можно удалять только те программы, кот используют для своей установки технологию Windows Installer.

Попробуй запускать свой скрипт "Run as..."
Автор: BULLDOG
Дата сообщения: 15.05.2007 16:26
Хочу написать скрипт для удаления принтера Microsoft XPS Document Writer

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Printer WHERE Caption = 'Microsoft XPS Document Writer'",,48)
For Each objItem in colItems
objItem.***
Next


Что нужно вместо звездочек написать, чтобы принтер удалился.
Автор: GC01
Дата сообщения: 15.05.2007 18:21
Добрый день всем!
Стоит такая задача - написать скрипт, который всем пользователям в АД меняет название организации. Ничего готового не нашел. Кто поможет?

Добавлено:
Упс, спасибо! вроде нашел!
Автор: TeX
Дата сообщения: 16.05.2007 09:05
Уважаемые, не подскажете ли, как можно с помощью скрипта заблокировать компьютер, это как при нажатии ctrl+alt+del в диалоге есть кнопка заблокировать и после ее нажатия блокируется комп и появляется сообщение типа "Компьютер используется и заблокирован ... " Для выводв из блокировки нужно ввести пароль.
Автор: jONES1979
Дата сообщения: 16.05.2007 11:58
TeX гугл в помощь
http://www.microsoft.com/technet/scriptcenter/resources/qanda/nov04/hey1115.mspx
Автор: YNY
Дата сообщения: 17.05.2007 05:37

Цитата:
BULLDOG

для того
Цитата:
Что нужно вместо звездочек написать, чтобы принтер удалился

ты реальный извращенец тебе тока радмином можно пользоваться!!!
Автор: BULLDOG
Дата сообщения: 17.05.2007 08:13
YNY

Вот тебе рабочий скрипт от "извращенца":

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer WHERE Caption = 'Microsoft XPS Document Writer'")

For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next

Этот принтер многим мешает, его надо удалить не только в моем офисе, но и в удаленных, где нет админов, но компы в нашем домене. Я что ко всем должен подключаться RAdmin'ом?

Добавлено:
Как получить OU залогиневшегося пользователя в VBScript?
Автор: YNY
Дата сообщения: 18.05.2007 08:55

Цитата:
Этот принтер многим мешает

каким интересно образом? че глаза разбигаются?) если ты ставиш руками принтор то в конце процедуры задается вопрос о том использовать его по умолчани или нет, думаю что и скриптом мона это отчекрыжить)

Добавлено:

Цитата:
objPrinter.Delete_
-- это опечатка (нижнее подчеркивание)?
Автор: BULLDOG
Дата сообщения: 18.05.2007 13:18
YNY

Во-первых, опечаток нет, принтер удаляется. Я этот скрипт взял из "script_center" от MS.
Во-вторых, принтер устанавливается при установке обновлений для MS Office 2003, а не сразу после установки пакета.
В третьих, у нас используются специализированные программы, в которых при нажатии кнопки печать пявляется выбор принтеров, и тупые тетки выбирают его. А потом звонят мне и говорят:"Как это я нажала на печать, а у меня вот что выскочило..." РАдминишь ее и объясняешь, что это не тот принтер, и, если бы один раз.
Автор: YNY
Дата сообщения: 24.05.2007 07:00

Цитата:
В третьих, у нас используются специализированные программы, в которых при нажатии кнопки печать пявляется выбор принтеров, и тупые тетки выбирают его

А что же помешает тупым теткам выбрать, при отсутствии удаленного микрософтовского, другой не тот что нада принтер???=> если захотят зае... то сделают это, а про то, что он с обновками ставится так ваще первый раз слышу (у меня он живет хоть оффис ХР)
Если в системе 2 принтера и один не тот что нада, то при установке принтера по умолчанию его не надо выбирать из списка, а просто отправить на печать -- работает в нормальных прогах, иначе см выше ?-)

Добавлено:
и кстати если они так не внимательны к тому куда на печать отправляют, то как они ваще могут нормально работать? им тока тратуары мести: там много ума не нада -- попал ты ... сочувствую
Автор: BULLDOG
Дата сообщения: 24.05.2007 08:26
Последний раз флуд развожу, больше не буду.

YNY

Они соображают в своих программах и все, больше им ничего не надо. В них нет принтера по умолчанию, всегда нужно выбирать. Они выбирали принтер по счету (допустим первый), название ничего не говорит. А после появления Microsoft XPS Document Writer он становился вторым.
Про Office XP не знаю, массово не использовали, массово начали ставить 2003, до этого использовали 2000. Так вот, при первоначальной установке 2003 SP2 или SP1 нет этого принтера, появляется только при установке обновлений.
Автор: Teo
Дата сообщения: 24.05.2007 14:26
есть WMI скрипт
при запуске получаю окошко такого содержания
http://img230.imageshack.us/img230/7532/wmisettxl0.png

при запуске в консоли получаю ошибку script.vbs(42,1) (null): Invalid Syntax
в строке 42 происходит такое

Set wmiServices = GetObject ( _
"winmgmts:{impersonationLevel=Impersonate}!//" _
& strComputerName)


система XP Embedded
может, кто сталкивался с таким?
Автор: jONES1979
Дата сообщения: 24.05.2007 15:47
Teo а в предыдущей строке что было?
Автор: Teo
Дата сообщения: 24.05.2007 16:47
jONES1979

вот [more=скрипт полностью]'TODO
' - add repartition command via diskpart for each volume
' - add possibility to auto generate cmd.txt
'

Option Explicit

Dim boolDebugEnabled, boolOk
Dim strComputerName, strQuery, strMessage, strDiskPartCmdPath, strDriveLetterToChange, strNeededDriveLetter
Dim wmiServices, wmiDiskDrives, wmiDiskDrive, wmiDiskPartitions, wmiDiskPartition, wmiLogicalDisks, wmiLogicalDisk, WshShell, objWmiService, colDisks, objDisk
Dim intCounter, intDiskDriveIndex
Dim subChangeLetter, objFSO, objDiskPartCMDFile, strDiskPartCmd
strComputerName = "."

'WScript.Echo Chr("C")+1

'''''''''''''''''''''''''''''''''''''''''''''''''
boolDebugEnabled = false
'''''''''''''''''''''''''''''''''''''''''''''''''

IF boolDebugEnabled THEN
    WScript.Echo "Debug is ON. Output will be verbose."
END IF

subCheckPartitionsAmount
WScript.Echo subCheckLogicalDisksAmount(intCounter)
'so we have exactly 4 logical disks and 4 partitions, running main check procedure
subMainCheck boolOk

IF boolOk THEN
    WScript.Echo "All drives are connected properly."
ELSE
    SET WshShell = WScript.CreateObject("WScript.Shell")
    strDiskpartCmdPath = Chr(34) & "c:\Windows\Temp\dp.cmd" & Chr(34)
    WshShell.Run (strDiskpartCmdPath)
END IF

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FUNCTION subCheckPartitionsAmount
Set wmiServices = GetObject ( _
"winmgmts:{impersonationLevel=Impersonate}!//" _
& strComputerName)

' Get physical disk drive
Set wmiDiskDrives = wmiServices.ExecQuery ( _
    "SELECT * FROM Win32_DiskDrive")

For Each wmiDiskDrive In wmiDiskDrives
If boolDebugEnabled Then
        'WScript.Echo "Checking disk: " & wmiDiskDrive.Caption & VbNewLine & "DeviceID: " _
        '    & " (" & wmiDiskDrive.DeviceID & ")"
        WScript.Echo "Disk number: " & wmiDiskDrive.Index & " has " & wmiDiskDrive.Partitions & " partitions"
    End If

    IF wmiDiskDrive.Partitions <> 2 THEN
        strMessage = "ATTENTION!!! " & "Disk " & wmiDiskDrive.Index & " doesn't contain 2 partitions"
        subQuit (strMessage)
    END IF

NEXT
END FUNCTION

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FUNCTION subQuit (strMessage)
    WScript.Echo strMessage
    WScript.Echo "Stopping."
    WScript.Quit
END FUNCTION

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FUNCTION subCheckLogicalDisksAmount (intCounter)

Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")

'checking amount of logical disks
Set colDisks = objWMIService.ExecQuery _
        ("Select * from Win32_LogicalDisk")
For each objDisk in colDisks

    IF objDisk.DriveType = 3 THEN
        intCounter = intCounter + 1
        IF boolDebugEnabled THEN
            Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID
        END IF
    END IF
Next

IF intCounter < 4 THEN
    strMessage = "ATTENTION!!! You have 4 partitions but number of logical disks is less then 4. This is odd. Please reboot so the system may assign necessary letters itself"
    subQuit (strMessage)
END IF

IF intCounter > 4 THEN
    strMessage = "Found more than 4 logical disks. This is odd. Please delete unnecessary."
    subQuit (strMessage)
END IF

END FUNCTION

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FUNCTION subMainCheck (boolOk)

Set wmiServices = GetObject ( _
"winmgmts:{impersonationLevel=Impersonate}!//" _
& strComputerName)

' Get physical disk drive
Set wmiDiskDrives = wmiServices.ExecQuery ( _
    "SELECT * FROM Win32_DiskDrive")

For Each wmiDiskDrive In wmiDiskDrives
    
'Use the disk drive device id to
' find associated partition
strQuery = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" _
& wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
Set wmiDiskPartitions = wmiServices.ExecQuery(strQuery)

For Each wmiDiskPartition In wmiDiskPartitions
'Use partition device id to find logical disk
Set wmiLogicalDisks = wmiServices.ExecQuery _
("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" _
& wmiDiskPartition.DeviceID & "'} WHERE AssocClass = Win32_LogicalDiskToPartition")

FOR EACH wmiLogicalDisk IN wmiLogicalDisks
            
            IF boolDebugEnabled THEN
                WScript.Echo "Partition number " & wmiDiskPartition.Index & " on disk " & wmiDiskDrive.Index & " has letter " & wmiLogicalDisk.DeviceID
            END IF
            
            IF wmiDiskDrive.Index = 0 THEN
            
                IF wmiDiskPartition.Index = 0 AND wmiLogicalDisk.DeviceID <> "C:" THEN
                    strMessage = "ATTENTION!!! It seems that system drive connected in wrong way!!!"
                    strMessage = "There's problem with disk " & wmiLogicalDisk.DeviceID & " It must have letter C."
                    subQuit (strMessage)
                END IF
    
                IF wmiDiskPartition.Index = 1 AND wmiLogicalDisk.DeviceID <> "D:" THEN
                    strMessage = "There's problem with disk " & wmiLogicalDisk.DeviceID & " It must have letter D."
                    intDiskDriveIndex = wmiDiskDrive.Index
                    strDriveLetterToChange = wmiLogicalDisk.DeviceID
                    strNeededDriveLetter = "D"
                    subAssignLetter intDiskDriveIndex, strDriveLetterToChange, strNeededDriveLetter
                    subRunDiskpart ("D")
                    subQuit (strMessage)
                END IF                
                
            END IF
            
            IF wmiDiskDrive.Index = 1 THEN
            
                IF wmiDiskPartition.Index = 0 AND wmiLogicalDisk.DeviceID <> "E:" THEN
                    strMessage = "There's problem with disk " & wmiLogicalDisk.DeviceID & " It must have letter E."
                    WScript.Echo strMessage
                    
                    subRunDiskpart ("E")
                    'subQuit (strMessage)
                END IF
    
                IF wmiDiskPartition.Index = 1 AND wmiLogicalDisk.DeviceID <> "F:" THEN
                    strMessage = "There's problem with disk " & wmiLogicalDisk.DeviceID & " It must have letter F."
                    WScript.Echo strMessage
                    subRunDiskpart ("F")
                    'subQuit (strMessage)
                END IF
            END IF
            
            
            IF wmiLogicalDisk.DeviceID = "F:" THEN
                boolOk = true
            ELSE
                boolOk = false
            END IF
            
NEXT
NEXT
NEXT

END FUNCTION


FUNCTION subRunDiskpart (strLetterToChange)
    WScript.Echo "Running partition tool."
    SET WshShell = WScript.CreateObject("WScript.Shell")
    'WScript.Echo strDiskpartCmdPath
    strDiskpartCmdPath = Chr(34) & "c:\Windows\Temp\" & strLetterToChange & ".cmd" & Chr(34)
    WshShell.Run (strDiskpartCmdPath)
END FUNCTION


FUNCTION subAssignLetter (intDiskDriveIndex, strDriveLetterToChange, strNeededDriveLetter)
    
    Const ForAppending = 2
    
    SET WshShell = WScript.CreateObject("WScript.Shell")
    SET objFSO=WScript.CreateObject("Scripting.FileSystemObject")
    
    SET objDiskPartCMDFile = objFSO.OpenTextFile("c:\windows\temp\cmd.txt",ForAppending,true)
    objDiskPartCMDFile.WriteLine("select disk " & intDiskDriveIndex)
    'removing BOTH letters
    objDiskPartCMDFile.WriteLine("select volume " & strNeededDriveLetter)
    objDiskPartCMDFile.WriteLine("remove letter " & strNeededDriveLetter)
    
    objDiskPartCMDFile.WriteLine("select volume " & strDriveLetterToChange)
    objDiskPartCMDFile.WriteLine("remove letter " & strDriveLetterToChange)
    
    
    objDiskPartCMDFile.WriteLine("assign letter " & strNeededDriveLetter)
    objDiskPartCMDFile.Close
    strDiskpartCmd = Chr(34) & "c:\windows\system32\diskpart.exe " & Chr(34) & "/s " & Chr(34) & "c:\Windows\Temp\cmd.txt" & Chr(34)
    WScript.Echo strDiskpartCmd
    WshShell.Run(strDiskpartCmd)

END FUNCTION
[/more]
фактически ничего
я так понимаю, что-то с WMI
но как узнать, что?
Автор: YNY
Дата сообщения: 28.05.2007 07:17
[q]jONES1979

вот скрипт полностью[q]
при запуске твоего скрипта мне выдаются сообщения о том что у меня менее 2 разжелов хотя это не так) если откл проверку, то - сообщение о "несовпадении 4-м" -- в общем совсем не понятное.
у меня 2 диска, причем один разбит на 2 раздела.
For Each wmiDiskDrive In wmiDiskDrives - сначала почему-то начинает с 1 и соотв прекрачает все т.к. на нем нет 2 разделов
такой как вы говорите ошибки пока не видел
а ваще на кой вам это? только чтоб убедиться что у вас те диски что нада?

Добавлено:
возможно что c:\windows\system32\diskpart.exe выполняется токо под админом, такова кол-ва разделов не имею и протестировать неначем)

следующая строка повторяется в FUNCTION subCheckPartitionsAmount и в FUNCTION subMainCheck (boolOk) -?

Set wmiServices = GetObject ( _
"winmgmts:{impersonationLevel=Impersonate}!//" _
& strComputerName)

Set wmiDiskDrives = wmiServices.ExecQuery ( _
"SELECT * FROM Win32_DiskDrive")
Автор: Sk1f
Дата сообщения: 28.05.2007 11:24
Такая задача - excel файл, заполненный записями - имена фирм. Нужно перенести эти записи в БД. Все сделал кроме одного момента - ограничение на повторяющиеся имена фирм при считывании их с файла.
Как решить эту проблему?
Автор: Teo
Дата сообщения: 30.05.2007 10:33
YNY

Цитата:
а ваще на кой вам это? только чтоб убедиться что у вас те диски что нада?

есть промышленный комп и жёсткая схема подключения винтов
нужно проверить правильность.



Цитата:
возможно что c:\windows\system32\diskpart.exe выполняется токо под админом, такова кол-ва разделов не имею и протестировать неначем)

я тестил под варей

да скрипт на самом деле работает

просто что-то с WMI
объект не создается
Автор: SpiKost
Дата сообщения: 31.05.2007 10:30
Automize 7.32 Enterprise
<del>
Автор: Sk1f
Дата сообщения: 31.05.2007 13:50
Нужно сделать задержку(delay) в vbs-скрипте.
Как?
Автор: Teo
Дата сообщения: 31.05.2007 18:09
wscript.sleep milliseconds

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

Предыдущая тема: BackUp Win2003Serer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.