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

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

AZABAZA 16-10-2015 12:18 2564496

Инкремент
 
Добрый день, всем

Вот есть скрипт
Код:

do {Write-Host password0$i; $i++}
while ($i -le 12 )


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

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

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

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

Foreigner 16-10-2015 13:40 2564523

AZABAZA,
Код:

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

AZABAZA 16-10-2015 13:49 2564528

Foreigner, Спасибо за помощь и отзыв.

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

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

Foreigner 16-10-2015 13:57 2564530

AZABAZA, Что-то как-то мутно..

AZABAZA 16-10-2015 14:06 2564532

Foreigner,
Ваш скрипт генерирует за один раз все 12 вариантов. А нужно запустил один раз он в текстовый файл записал "pass001"

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

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

Foreigner 16-10-2015 15:13 2564578

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 2564667

Цитата:

Цитата Foreigner
Код:

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

»

В данном случае можно упростить до:
Код:

$a %= 12

Foreigner 16-10-2015 20:14 2564683

Iska, Тогда будет попадать '0' и не будет 12, т.е pass000...pass011, а надо pass001...pass012

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

Iska 16-10-2015 20:27 2564690

Ах ты ж… И на старуху бывает проруха :(.

Да, красоты не получится. Придётся так:
Код:

$a = $a % 12 + 1
вместо того же.

Foreigner 16-10-2015 20:38 2564695

Другое дело:
Код:

$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 2565502

Foreigner, Iska,
Спасибо огромное :clapping: :clapping: :clapping: , выручили!
Благодарю вас!

AZABAZA 19-10-2015 07:45 2565518

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 2572161

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 2572177

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

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

AZABAZA 09-11-2015 05:41 2572905

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 2572923

Добавьте перед [-2..-1] еще [0]:
Код:

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

AZABAZA 09-11-2015 08:42 2572926

Foreigner,

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

Код:

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

AZABAZA 10-11-2015 13:52 2573324

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 2576112

Спасибо 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 2631513

Добрый день, Iska, Foreigner, Kazun,

Нужен совет.

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

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

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

Kazun 03-05-2016 13:14 2631528

Самое простое использовать ConvertTo-SecureString/ConvertFrom-SecureString с параметром Key:

Код:

#Генерируем ключ
$KeyFile = "\\Server\Share\Key.txt"
$Key = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)
$Key | Out-File $KeyFile

В примере ключ сохранен в файл на шаре, можно его записать в таблицу SQL.

Код:

#Шифруем пароль
$PasswordFile = "\\Server\Share\PAES.txt"
$KeyFile = "\\Server\Share\Key.txt"
$Key = Get-Content $KeyFile
$Password = 'P@$$w0rd' | ConvertTo-SecureString -AsPlainText -Force
$Password | ConvertFrom-SecureString -key $Key | Out-File $PasswordFile

В примере пароль сохранен в файл на шаре, можно его записать в таблицу SQL.

Код:

#Credentials
$UserName = "User"
$PasswordFile = "\\Server\Share\PAES.txt"
$KeyFile = "\\Server\Share\Key.txt"
$Key = Get-Content $KeyFile
$Password = Get-Content $PasswordFile | ConvertTo-SecureString -Key $Key
$Cred = New-Object Management.Automation.PSCredential($UserName, $Password)

И теперь можно подставлять в скрипте:
Код:

$Cred.UserName - Имя пользователя
$Cred.GetNetworkCredential().Password - Пароль

Securely Store Credentials on Disk

PowerShell Encryption Examples
Share encrypted data between users and computers with PowerShell - Использование сертификатов


Время: 05:17.

Время: 05:17.
© OSzone.net 2001-