日安,
我正在尝试创建用户启动日期的默认密码库。例如,如果用户启动"11/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 发布于 2018-11-15 16:42:21
使用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发布于 2018-11-15 16:28:45
重新使用优雅的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!。
发布于 2018-11-15 16:34:35
免责声明:您可能已经知道了,但是我必须声明这是一个非常糟糕的密码,如果您可以这样称呼的话
大部分内容都可以卸载到类型中,除了月份的序号后缀。
我会把它分解成三个步骤:
# 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!')https://stackoverflow.com/questions/53323403
复制相似问题