PDA

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


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

AZABAZA
16-10-2015, 12:18
Добрый день, всем

Вот есть скрипт
do {Write-Host password0$i; $i++}
while ($i -le 12 )


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

Это для создания скрипта для ежемесячной смены паролей!

Будут вопросы пишите!

Кто чем поможет, благодарен!

Foreigner
16-10-2015, 13:40
AZABAZA,

& { for ($i = 1; $i -le 12; $i++ ) { "pass0$i" }} | sc test.txt

AZABAZA
16-10-2015, 13:49
Foreigner, Спасибо за помощь и отзыв.

но этот скрипт выполняет за один раз все пароли!
Нужно при запуске выполнять скрипт и что бы он записывал один пароль текстовый файл.

Foreigner, когда доходит до 12 что бы он сбросил и заново начал от 1

Foreigner
16-10-2015, 13:57
AZABAZA, Что-то как-то мутно..

AZABAZA
16-10-2015, 14:06
Foreigner,
Ваш скрипт генерирует за один раз все 12 вариантов. А нужно запустил один раз он в текстовый файл записал "pass001"

При следующем запуске в текстовый файл записал "pass002"

А когда будет "pass012" чтобы не писал следующий раз "pass013" он сбрасывает счетчик и снова становится "pass001"

Foreigner
16-10-2015, 15:13
AZABAZA,

$ofs = ''

if (test-path test.txt) { $a = [int][string](get-content test.txt)[-2..-1] }
else { $a = 0 }

$a++
if ($a -gt 12) { $a = 1 }

set-content test.txt $('pass0{0:d2}' -f $a)

Iska
16-10-2015, 19:25
$a++
if ($a -gt 12) { $a = 1 } »
В данном случае можно упростить до:
$a %= 12

Foreigner
16-10-2015, 20:14
Iska, Тогда будет попадать '0' и не будет 12, т.е pass000...pass011, а надо pass001...pass012

Тут можно убрать первый else. Он явно лишний

Iska
16-10-2015, 20:27
Ах ты ж… И на старуху бывает проруха :(.

Да, красоты не получится. Придётся так:
$a = $a % 12 + 1
вместо того же.

Foreigner
16-10-2015, 20:38
Другое дело:

$ofs = ''
if (test-path test.txt) { $a = [int][string](get-content test.txt)[-2..-1] }
$a = $a % 12 + 1
set-content test.txt $('pass0{0:d2}' -f $a)

AZABAZA
19-10-2015, 05:38
Foreigner, Iska,
Спасибо огромное :clapping: :clapping: :clapping: , выручили!
Благодарю вас!

AZABAZA
19-10-2015, 07:45
Foreigner, Iska,
А есть ли возможность вызывать это в одном текстовом файле 2- и более раз?

Пример: USER1/pass012
USER2/pass012
USERn/pass012

И если хочу добавить простой текст перед паролем выдает ошибку
Cannot convert value "простой текст" to type "System.Int32". Error: "Input string was not in a corre
ct format."
At line:2 char:27
+ ... t-path test.txt) { $a = [int][string](get-content test.txt)[-2..-1] }
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
:help: :dont-know

AZABAZA
06-11-2015, 13:51
Foreigner, Iska,
Всем привет,
выходит вот такая ошибка если файл существует в директорий. А если удалить, то запускается без проблем!
в чем причина не подскажете светлые умы? :)

Cannot convert value "text;exit" to type "System.Int32".
Error: "Input string was not in a correct format."
At D:\test_bat\pp.ps1:2 char:29
+ ... \mco.bat) { $a = [int][string](get-content D:\mco.bat)[-2..-1]} {$b = ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger

Foreigner
06-11-2015, 14:47
AZABAZA, Откуда взялся 'text;exit' ? В текстовом файле должна быть единственная строка вида "pass001".."pass012"
Понятно что эту строку нельзя привести к типу integer (точнеe последние два символа 'it').

Скрипт берет все содержимое файла, если в файле несколько строк, то надо уточнить какую брать по порядку или какую по содержимому.

AZABAZA
09-11-2015, 05:41
Foreigner,

текст взялся из скрипта. ниже скрипт


$ofs = ''
if (test-path D:\mco.bat) { $a = [int][string](get-content D:\mco.bat)[-2..-1]} {$b = [int][string](get-content D:\mco.bat)[-2..-1] }
$a = $a % 12 + 1
$b = $b % 12 + 1
set-Content D:\mco.bat "chcp 1251
set ORACLE_SID=DB"
[System.IO.File]::AppendAllText("D:\mco.bat", $('sqlplus"user/pass0{0:d2}' -f $b), [System.Text.Encoding]::ASCII)
[System.IO.File]::AppendAllText("D:\mco.bat", '@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=DATABASE)(Port=1521))(CONNECT_DATA=(SID=DB)))"', [System.Text.Encoding]::ASCII)
Add-Content D:\mco.bat $('')
[System.IO.File]::AppendAllText("D:\mco.bat", $('ALTER USER user IDENTIFIED BY pass0{0:d2};' -f $a), [System.Text.Encoding]::ASCII)
Add-Content D:\mco.bat $('')
[System.IO.File]::AppendAllText("D:\mco.bat", $('ALTER USER user IDENTIFIED BY pass0{0:d2};' -f $a), [System.Text.Encoding]::ASCII)
Add-Content D:\mco.bat $('')
[System.IO.File]::AppendAllText("D:\mco.bat", $('ALTER USER user IDENTIFIED BY pass0{0:d2};' -f $a), [System.Text.Encoding]::ASCII)
Add-Content D:\mco.bat $('')
[System.IO.File]::AppendAllText("D:\mco.bat", 'SELECT NAME FROM V$DATABASE;', [System.Text.Encoding]::ASCII)
Add-Content D:\mco.bat $('')
[System.IO.File]::AppendAllText("D:\mco.bat", 'exit', [System.Text.Encoding]::ASCII)
Add-Content D:\mco.bat $('')
Add-Content D:\mco.bat $('')

и такой скрипт еще 2 раза в одном ps1.
И этот скрипт выводит следующую ошибку:

Cannot convert value "exit" to type "System.Int32". Error: "Input string was no
t in a correct format."
At D:\Untitled5.ps1:2 char:29
+ ... \mco.bat) { $a = [int][string](get-content D:\mco.bat)[-2..-1]} {$b = ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger

Foreigner
09-11-2015, 08:29
Добавьте перед [-2..-1] еще [0]:

...(get-content D:\mco.bat)[0][-2..-1]...

AZABAZA
09-11-2015, 08:42
Foreigner,

ошибка перестала выводится, но пароль не генерируется.

...(get-content D:\tuo.log)[0][-2..-1]}...

AZABAZA
10-11-2015, 13:52
Foreigner,

Разобрался, не [0], а 4, 2 поставил номер поля :drug:
(get-content D:\tuo.log)[4][-3..-2]} { $b =[int][string](get-content D:\tuo.log)[2][-91..-90]}

Но вот тут другая проблема вылезла.
Если пишешь для двух переменных то он генерирует для первого переменного ($a), а если впереди прописать переменную ($b)
тогда он генерирует для ($b) :help:

$ofs = ''
if (test-path D:\tuo.log) { $a = [int][string](get-content D:\tuo.log)[4][-3..-2]} { $b =[int][string](get-content D:\tuo.log)[2][-91..-90]}
$a = $a % 12 + 1
$b = $b % 12 + 1....

У кого какие догадки есть?

С помощью IF/THEN/ELSE/ELSEIF можно решить проблему?

AZABAZA
18-11-2015, 12:21
Спасибо Iska, Foreigner, Kazun

if (test-path D:\tuo.log) { $a = [int][string](get-content D:\tuo.log)[4][-3..-2]} { $b = [int][string](get-content D:\tuo.log)[2][-91..-90]}

заменить на :

if (test-path D:\tuo.log) {
$a = [int][string](get-content D:\tuo.log)[4][-3..-2]
$b = [int][string](get-content D:\tuo.log)[2][-91..-90]
}

Все решился =)

AZABAZA
03-05-2016, 12:27
Добрый день, Iska, Foreigner, Kazun,

Нужен совет.

как скрыть тот пароль что в маске указано? чтобы пароль не был в открытом виде.

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

Спасибо за любые советы.




© OSzone.net 2001-2012