Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Последовательное выполнение команд из txt

Ответить
Настройки темы
PowerShell - Последовательное выполнение команд из txt

Аватара для rvm.luma

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: rvm.luma
Дата: 06-09-2013
Описание: добавил решение
Имеем: txt-файл со списком команд для powershell

Задача: Выполнить эти команды.

ЗЫ: Выполнение команд из файла *.ps1 запрещено.
ЗЫЫ: Приветствуются вырианты на AutoIt .

РЕШЕНИЕ:
читать дальше »

c:\ps\file_name.bat
читать дальше »
Код: Выделить весь код
powershell -c "& { function x { iex $input }; $((gc file_name.txt) -notmatch '(^$|#)' -join ';') | x }


c:\ps\file_name.txt
читать дальше »
Код: Выделить весь код
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\all_pc\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
import-module activedirectory
$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $oucity
$sheet = $workbook.worksheets.item($oucity)
$out = get-adcomputer -filter * -searchbase "ou=$oucity,dc=mydomain,dc=com" -properties distinguishedname, name | select distinguishedname, name
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$str++}
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+"all_pc")
$excel.quit()
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\delete_pc_inactive\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
import-module activedirectory
$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $oucity
$sheet = $workbook.worksheets.item($oucity)
$out = get-adcomputer -filter * -searchbase "ou=$oucity,ou=computers4delete,dc=mydomain,dc=com" -properties distinguishedname, name | select distinguishedname, name
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$delete_pc_inactive = $sheet.cells.item($str,1).value()
$str++}
dsrm -subtree -exclude -noprompt -c "ou=$oucity,ou=computers4delete,dc=mydomain,dc=com"
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+"delete_pc_inactive")
$excel.quit()
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\pc_inactive_lastlogon\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
import-module activedirectory
$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $oucity
$sheet = $workbook.worksheets.item($oucity)
$out = get-adcomputer -filter * -searchbase "ou=users&pcs,ou=$oucity,dc=mydomain,dc=com" -properties distinguishedname, name, lastlogon | select distinguishedname, name, lastlogon
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$sheet.cells.item(1,3) = "lastlogon"
$beforedate = (get-date).addmonths(-2)
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$sheet.cells.item($str,3) = $in.lastlogon
if ($beforedate -le $in.lastlogon){$sheet.cells.item($str,4) = "disable"}
$str++}
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+"pc_inactive_lastlogon")
$excel.quit()
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\users_inactive\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
$beforedate = (get-date).addmonths(-1)
import-module activedirectory
function inactive_users{$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $ouplace
$sheet = $workbook.worksheets.item($ouplace)
$out = get-aduser -filter * -searchbase "ou=$ouplace,ou=users&pcs,ou=$oucity,dc=mydomain,dc=com" -properties distinguishedname, name, postalcode, pager, pwdlastset, whencreated | select distinguishedname, name, postalcode, pager, pwdlastset, whencreated
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$sheet.cells.item(1,3) = "postalcode"
$sheet.cells.item(1,4) = "pager"
$sheet.cells.item(1,5) = "pwdlastset"
$sheet.cells.item(1,6) = "whencreated"
$sheet.cells.item(1,12) = "0"
$sheet.cells.item(1,12).numberformat = 0
$sheet.cells.item(1,13) = "disable"
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$sheet.cells.item($str,3) = $in.postalcode
$sheet.cells.item($str,4) = $in.pager
$sheet.cells.item($str,5).numberformat = 0
$sheet.cells.item($str,5) = $in.pwdlastset
$sheet.cells.item($str,6) = $in.whencreated
if ($in.pwdlastset -eq 0 ){if ($beforedate -gt $in.whencreated){$sheet.cells.item($str,7) = "disable"}}
if ($sheet.cells.item($str,7).value() -eq $sheet.cells.item(1,13).value()){$inactive = $sheet.cells.item($str,1).value()
$objuser = [adsi]"ldap://$inactive"
$objuser.psbase.invokeset("accountdisabled", $true)
$objuser.setinfo()
move-adobject -identity "$inactive" -targetpath "ou=inactive,ou=$oucity,dc=mydomain,dc=com"}
$str++}
$sheet.cells.item(1,12) = ""
$sheet.cells.item(1,13) = ""
$sheet.cells.item(1,11) = ""
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+$ouplace)
$excel.quit()}
$ouplace = "office"
inactive_users
$ouplace = "points"
inactive_users
$ouplace = "sc"
inactive_users
$ouplace = "warehouse"
inactive_users


Подводные камни
читать дальше »


Цитата Foreigner:
PS. Главное, что бы в файле не было комментариев ( "#" ) после команды. Я попробовал трехстрочник -- работает
PS1. Заметил еще, "{" и "}" в исходном файле не должны быть на отдельной строке. »
Цитата rvm.luma:
+Не выносит команды типа:
powershell
exit
+ Знак начала цикла "{" нужно выставлять вслед за командой. »


Отправлено: 12:53, 04-09-2013

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Просто выполнить этот файл?
Цитата rvm.luma:
ЗЫ: Выполнение команд из файла *.ps1 запрещено. »
Код: Выделить весь код
powershell -executionpolicy 'unrestricted' -c file.ps1

Отправлено: 13:49, 04-09-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для rvm.luma

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Просто выполнить этот файл? »
К сожалению, в этом и загвоздка... Политиками предприятия запрещено выполнение powershell скриптов, но при этом copy-paste текста в ps-консоль разрешен...

читать дальше »

Интересует, выполнение файла в один-клик, без нудного копи-паста

Сейчас застопорился на autoit скрипте, в последней строке,
не работает right-клик в рабочей области cmd.

Последний раз редактировалось rvm.luma, 04-09-2013 в 14:18. Причина: добавил преследуемые задачи, проблемы


Отправлено: 14:03, 04-09-2013 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


rvm.luma,
Попробуй так, запускал из cmd.exe:
Код: Выделить весь код
powershell -c "& { function x { iex $input }; $((gc file.txt) -notmatch '(^$|#)' -join ';') | x }
PS. Главное, что бы в файле не было комментариев ( "#" ) после команды. Я попробовал трехстрочник -- работает
PS1. Заметил еще, "{" и "}" в исходном файле не должны быть на отдельной строке.

Возможны и другие подводные камни.

Последний раз редактировалось Foreigner, 04-09-2013 в 15:29.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:16, 04-09-2013 | #4


Аватара для rvm.luma

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


c:\ps\file_name.bat
Код: Выделить весь код
powershell -c "& { function x { iex $input }; $((gc file_name.txt) -notmatch '(^$|#)' -join ';') | x }
c:\ps\file_name.txt
Код: Выделить весь код
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\all_pc\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
import-module activedirectory
$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $oucity
$sheet = $workbook.worksheets.item($oucity)
$out = get-adcomputer -filter * -searchbase "ou=$oucity,dc=mydomain,dc=com" -properties distinguishedname, name | select distinguishedname, name
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$str++}
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+"all_pc")
$excel.quit()
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\delete_pc_inactive\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
import-module activedirectory
$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $oucity
$sheet = $workbook.worksheets.item($oucity)
$out = get-adcomputer -filter * -searchbase "ou=$oucity,ou=computers4delete,dc=mydomain,dc=com" -properties distinguishedname, name | select distinguishedname, name
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$delete_pc_inactive = $sheet.cells.item($str,1).value()
$str++}
dsrm -subtree -exclude -noprompt -c "ou=$oucity,ou=computers4delete,dc=mydomain,dc=com"
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+"delete_pc_inactive")
$excel.quit()
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\pc_inactive_lastlogon\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
import-module activedirectory
$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $oucity
$sheet = $workbook.worksheets.item($oucity)
$out = get-adcomputer -filter * -searchbase "ou=users&pcs,ou=$oucity,dc=mydomain,dc=com" -properties distinguishedname, name, lastlogon | select distinguishedname, name, lastlogon
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$sheet.cells.item(1,3) = "lastlogon"
$beforedate = (get-date).addmonths(-2)
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$sheet.cells.item($str,3) = $in.lastlogon
if ($beforedate -le $in.lastlogon){$sheet.cells.item($str,4) = "disable"}
$str++}
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+"pc_inactive_lastlogon")
$excel.quit()
$datenow = get-date -uformat "%Y.%m.%d_%H.%M.%S"
#########################################################
#########################changed#########################
#########################################################
$oucity = "moscow"
$path = "c:\ps\users_inactive\$datenow\"
#########################################################
#########################changed#########################
#########################################################
new-item $path -itemtype directory
$excel = new-object -comobject excel.application
$beforedate = (get-date).addmonths(-1)
import-module activedirectory
function inactive_users{$workbook = $excel.workbooks.add()
$workbook.worksheets.item(3).delete()
$workbook.worksheets.item(2).delete()
$workbook.worksheets.item(1).name = $ouplace
$sheet = $workbook.worksheets.item($ouplace)
$out = get-aduser -filter * -searchbase "ou=$ouplace,ou=users&pcs,ou=$oucity,dc=mydomain,dc=com" -properties distinguishedname, name, postalcode, pager, pwdlastset, whencreated | select distinguishedname, name, postalcode, pager, pwdlastset, whencreated
$sheet.cells.item(1,1) = "distinguishedname"
$sheet.cells.item(1,2) = "name"
$sheet.cells.item(1,3) = "postalcode"
$sheet.cells.item(1,4) = "pager"
$sheet.cells.item(1,5) = "pwdlastset"
$sheet.cells.item(1,6) = "whencreated"
$sheet.cells.item(1,12) = "0"
$sheet.cells.item(1,12).numberformat = 0
$sheet.cells.item(1,13) = "disable"
$str = 2
foreach ($in in $out){$sheet.cells.item($str,1) = $in.distinguishedname
$sheet.cells.item($str,2) = $in.name
$sheet.cells.item($str,3) = $in.postalcode
$sheet.cells.item($str,4) = $in.pager
$sheet.cells.item($str,5).numberformat = 0
$sheet.cells.item($str,5) = $in.pwdlastset
$sheet.cells.item($str,6) = $in.whencreated
if ($in.pwdlastset -eq 0 ){if ($beforedate -gt $in.whencreated){$sheet.cells.item($str,7) = "disable"}}
if ($sheet.cells.item($str,7).value() -eq $sheet.cells.item(1,13).value()){$inactive = $sheet.cells.item($str,1).value()
$objuser = [adsi]"ldap://$inactive"
$objuser.psbase.invokeset("accountdisabled", $true)
$objuser.setinfo()
move-adobject -identity "$inactive" -targetpath "ou=inactive,ou=$oucity,dc=mydomain,dc=com"}
$str++}
$sheet.cells.item(1,12) = ""
$sheet.cells.item(1,13) = ""
$sheet.cells.item(1,11) = ""
$range = $sheet.usedrange
$range.entirecolumn.autofit() | out-null
$excel.activeworkbook.saveas($path+$ouplace)
$excel.quit()}
$ouplace = "office"
inactive_users
$ouplace = "points"
inactive_users
$ouplace = "sc"
inactive_users
$ouplace = "warehouse"
inactive_users

Последний раз редактировалось rvm.luma, 06-09-2013 в 14:18. Причина: исправил решение


Отправлено: 13:24, 06-09-2013 | #5


Аватара для rvm.luma

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Возможны и другие подводные камни. »
+Не выносит команды типа:
powershell
exit

+ Знак начала цикла "{" нужно выставлять вслед за командой.

Отправлено: 14:21, 06-09-2013 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Последовательное выполнение команд из txt

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Выполнение Exchange команд Ыть Скриптовые языки администрирования Windows 6 15-02-2012 20:07
CMD/BAT - Выполнение команд в фоновом режиме браузера ZeVSalt Скриптовые языки администрирования Windows 4 10-11-2011 07:56
CMD/BAT - выполнение команд из списка в txt файле systemroot Скриптовые языки администрирования Windows 2 12-02-2011 17:49
PowerShell - Удаленное выполнение команд Powershell + WMI nigra Скриптовые языки администрирования Windows 0 19-05-2010 16:36
Загрузка - Выполнение DOS команд перед загрузкой Windows Gof Microsoft Windows 2000/XP 14 24-07-2007 06:03




 
Переход