Question : Change password Powershell

I found this nice little script that will help me change my passwords.  It seems to work, but I do not get any output.

PS C:\ChangeAdmin> .\change.ps1
PS C:\ChangeAdmin>

It appears to be written to dump stuff to excel (there is no excel installed on the server I am running the script from), but I can't find any excel file.

In addition to the excel format, how would I make this dump all the actions to the screen in addition to the excel file, so I can check the work and modify if needed?
Code Snippet:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
# Credit to http://myitforum.com/cs2/blogs/yli628/archive/2007/08/23/powershell-script-to-change-administrator-password-on-a-list-of-machines.aspx
 
$erroractionpreference = "SilentlyContinue"
 
$a = New-Object -comobject Excel.Application
$a.visible = $True
 
$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)
 
$c.Cells.Item(1,1) = "Machine Name"
$c.Cells.Item(1,2) = "Password Changed"
$c.Cells.Item(1,3) = "Report Time Stamp"
 
$d = $c.UsedRange
$d.Interior.ColorIndex = 19
$d.Font.ColorIndex = 11
$d.Font.Bold = $True
 
$intRow = 2
 
foreach ($strComputer in get-content C:\MachineList.Txt)
{
$c.Cells.Item($intRow,1)  = $strComputer.ToUpper()
 
# Using .NET method to ping test the servers  This is very cool!
$ping = new-object System.Net.NetworkInformation.Ping
 
$Reply = $ping.send($strComputer)
 
 
if($Reply.status -eq "success")
{
# This is the Key Part
$admin=[adsi]("WinNT://" + $strComputer + "/administrator, user")
 
$admin.psbase.invoke("SetPassword", "Whatever1")
 
#$admin.psbase.CommitChanges() - I am surprised that I don't have to do this!
 
# If this is for AD account, we could use PasswordLastchanged attribute. But WinNT provider does not #support the PasswordLastChanged attribute!
 
# I was trying to use passwordage attribute value but somehow I found it give you the value for last time, #may be because there is a delay for this attribute to propagate. So I made an executive decision to test #if passwordage is $null  so this may not be 100% accurate.
 
$pwage = $admin.passwordage
 
If($pwage -ne $null)
{
$c.Cells.Item($intRow,2).Interior.ColorIndex = 4
$c.Cells.Item($intRow,2) = "Yes"
}
Else
{
$c.Cells.Item($intRow,2).Interior.ColorIndex = 3
$c.Cells.Item($intRow,2) = "No"
}
}
Else
{
$c.Cells.Item($intRow,2).Interior.ColorIndex = 3
$c.Cells.Item($intRow,2) = "Not Pingable"
}
 
$c.Cells.Item($intRow,3) = Get-Date
 
$Reply = ""
$pwage = ""
$intRow = $intRow + 1
}
$d.EntireColumn.AutoFit()
 
#cls
Open in New Window Select All

Answer : Change password Powershell

try the code in the code snippet below

You will need Excel installed to use the Excel COM object, so I removed all reference to it.

This will now collect the output in a variable, at the end of the script it will print the variable to the screen and export it to a CSV file, which is probably as good as an Excel file, except you wont have colours.

I haven't tested it, so hopefully it works for you. If there are any errors have a go at fixing them, otherwise post back and I'll actually test/fix the code.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
# Credit to http://myitforum.com/cs2/blogs/yli628/archive/2007/08/23/powershell-script-to-change-administrator-password-on-a-list-of-machines.aspx
 
$erroractionpreference = "SilentlyContinue"
 
$results = @()
 
foreach ($strComputer in get-content C:\MachineList.Txt)
{
    $entry = New-Object PSObject
    $entry | Add-Member -MemberType NoteProperty -Name MachineName -Value $strComputer.ToUpper()
 
    # Using .NET method to ping test the servers  This is very cool!
    $ping = new-object System.Net.NetworkInformation.Ping
 
    $Reply = $ping.send($strComputer)
 
 
    if($Reply.status -eq "success")
    {
        # This is the Key Part
        $admin=[adsi]("WinNT://" + $strComputer + "/administrator, user")
 
        $admin.psbase.invoke("SetPassword", "Whatever1")
 
        #$admin.psbase.CommitChanges() - I am surprised that I don't have to do this!
 
        # If this is for AD account, we could use PasswordLastchanged attribute. But WinNT provider does not #support the PasswordLastChanged attribute!
 
        # I was trying to use passwordage attribute value but somehow I found it give you the value for last time, #may be because there is a delay for this attribute to propagate. So I made an executive decision to test #if passwordage is $null  so this may not be 100% accurate.
 
        $pwage = $admin.passwordage
 
        If($pwage -ne $null)
        {
            $entry | Add-Member -MemberType NoteProperty -Name PasswordChanged -Value "Yes"
        }
        Else
        {
            $entry | Add-Member -MemberType NoteProperty -Name PasswordChanged -Value "No"
        }
    }
    Else
    {
        $entry | Add-Member -MemberType NoteProperty -Name PasswordChanged -Value "Not Pingable"
    }
 
    $entry | Add-Member -MemberType NoteProperty -Name ReportTimeStamp -Value Get-Date
 
    $results += $entry
 
    $Reply = ""
    $pwage = ""
}
 
$results
$results | Export-Csv "c:\temp\results.csv"
Open in New Window Select All
Random Solutions  
 
programming4us programming4us