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

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

rvm.luma 04-09-2013 12:53 2212535

Последовательное выполнение команд из txt
 
Имеем: 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
+ Знак начала цикла "{" нужно выставлять вслед за командой. »



Foreigner 04-09-2013 13:49 2212582

Просто выполнить этот файл?
Цитата:

Цитата rvm.luma
ЗЫ: Выполнение команд из файла *.ps1 запрещено. »

Код:

powershell -executionpolicy 'unrestricted' -c file.ps1

rvm.luma 04-09-2013 14:03 2212593

Цитата:

Цитата Foreigner
Просто выполнить этот файл? »

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

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

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

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

Foreigner 04-09-2013 15:16 2212632

rvm.luma,
Попробуй так, запускал из cmd.exe:
Код:

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

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

rvm.luma 06-09-2013 13:24 2213701

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:21 2213719

Цитата:

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

+Не выносит команды типа:
powershell
exit

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


Время: 12:11.

Время: 12:11.
© OSzone.net 2001-