vnavna
vnavna

Reputation: 83

PowerShell script will not run in order

The PowerShell script functions fine if I run it line by line but when attempting to run the script as one the search for users does not come up in time for the next question. Please let me know on how I can force the third line of the script to come up as requested instead way later.

$name = Read-Host "What is the user's first name or letter?"

$list = Get-ADUser -Filter * | ? {$_.SamAccountName -match $name} | select SamAccountName | sort SamAccountName
$list


$DisableUser = Read-Host "Copy and paste the user here"
$t = $DisableUser
$year = Read-Host "Please input the year the user should be disabled, in this format (YYYY)"
$month = Read-Host "Please input the month the user should be disabled, in this format (MM)"
$day = Read-Host "Please input the day the user should be disabled, in this format (DD)"
$date = "$month/$day/$year"


$hour = Read-Host "Please input the hour of the day the user should be disabled, in this format (HH)"
$minute = Read-Host "Please input the minute the user should be disabled, in this format (MM)"
$seconds = Read-Host "Please input the second the user should be disabled, in this format (SS)"
$ampm = Read-Host "AM or PM?"
$Time = "${hour}:${minute}:${seconds} ${ampm}"


$dandt = "$date $Time"
$dandt

Write-host "$t will be disabled on this date, $dandt"

$answer = Read-Host "Is this correct? Please type Yes or No"
$l = $answer
    If ($l -like "y*")
    {Set-ADAccountExpiration $t -DateTime $dandt}
    ELSE { "Exiting"; Return}

Upvotes: 0

Views: 1251

Answers (1)

Bacon Bits
Bacon Bits

Reputation: 32220

You're combining output streams. Read-Host and Write-Host write directly to the console, while $list and $dandt standing by themselves output to standard output. They're desynchronized because they're different output streams. The solution is basically to force everything through one stream. Since you're using Read-Host, that means the console stream.

Change this:

$list

To one of these:

$list | Format-Table -AutoSize | Out-String | Write-Host
$list | Format-List | Out-String | Write-Host

And this:

$dandt

To this:

Write-Host $dandt

That said, this is not at all how I'd write something like this. I'd rather use ADUC/ADAC than this.

Upvotes: 2

Related Questions