манипуляции со строками для пароля - PullRequest
0 голосов
/ 15 ноября 2018

Добрый день,

Я пытаюсь создать базу паролей по умолчанию для даты, с которой запускается пользователь.Например, если пользователь запускает «10/10/2018», пароль должен быть «Sep10th2018!»

, это то, что у меня есть.Это «работает», но я уверен, что должен быть лучший способ сделать это.Я просто не знаю как.На всякий случай, это не такая уж большая проблема.Больше для изучения ради.Я пытаюсь стать лучше в PowerShell.

#   Generate Default Password
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "1") {
    $Month = "Jan"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "2") {
    $Month = "Feb"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "3") {
    $Month = "Mar"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "4") {
    $Month = "Apr"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "5") {
    $Month = "May"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "6") {
    $Month = "Jun"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "7") {
    $Month = "Jul"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "8") {
    $Month = "Aug"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "9") {
    $Month = "Sep"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "1" -and $StartDate[1] -eq "0") {
    $Month = "Oct"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "1" -and $StartDate[1] -eq "1") {
    $Month = "Nov"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}   
IF ($StartDate[0] -eq "1" -and $StartDate[1] -eq "2") {
    $Month = "Dec"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}

[string]$password2 = @($Month + $Day + $Year)
$password = $password2 | ConvertTo-SecureString -AsPlainText -Force
$password 

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Отказ от ответственности: вы, вероятно, уже знаете, но я должен заявить, что это очень плохой пароль, если вы даже можете назвать его так:


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

Я бы разбил его на 3 этапа:

  1. Разобрать дату ввода
  2. Генерация первой половины
  3. Рассчитать суффикс
  4. Добавить год

# Parse the input date
$inputDate = Read-Host "Input date in the format MM/dd/yyyy"
$date = [datetime]::ParseExact($inputDate,'MM/dd/yyyy',$null)

# Generate first half 
$dateString = $date.ToString('MMMdd')

# Calculate the ordinal suffix
$day = $date.Day
if($day -in 1,21,31) {
    $dateString += 'st'
}
else if($day -in 2,22) {
    $dateString += 'nd'
}
else if($day -in 3,23) {
    $dateString += 'rd'
}
else {
    $dateString += 'th'
}

# Append the year:
$dateString += $date.ToString('yyyy!')
0 голосов
/ 15 ноября 2018

Использование regex для получения суффикса дня и оператор форматирования для создания пароля:

function Get-DateSuffix([datetime]$Date) {
    switch -regex ($Date.Day.ToString()) {
        '1(1|2|3)$' { 'th'; break }
        '.?1$'      { 'st'}
        '.?2$'      { 'nd'}
        '.?3$'      { 'rd'}
        default     { 'th'}
    }
}

[datetime]$StartDate = "11/10/2018"

$password = "{0:MMM}{1}{2}{3}!" -f $StartDate, $StartDate.Day, (Get-DateSuffix $StartDate), $StartDate.Year
0 голосов
/ 15 ноября 2018

Изменив элегантное решение C # здесь , вы можете сделать это в PowerShell следующим образом:

    function Get-DaySuffix($day)
    {
        switch ($day)
        {
            {$day -in (1,21,31)} {"st" }
            {$day -in (2,22)} { "nd" }
            {$day -in (3,23)} { "rd" }
            default { "th" }
        }
    }

    # Change to some other means of getting date - e.g. Read-Host
    $startDate = Get-Date "23/05/2007"

    # Get a collection of the month names (e.g. Jan, Feb, mar, etc)
    $months = [System.Globalization.CultureInfo]::CurrentCulture.DateTimeFormat.AbbreviatedMonthNames

    # Build the password from the date parts
    $password = "$($months[$startDate.Month-1])$($startDate.Day)$(Get-DaySuffix $startDate.Day)$($startDate.Year)!"

В этом случае $password устанавливается на May23rd2007!.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...