New in v2.0:
- Compatibility with Windows servers
- Many pre-requisities removed
- Customization of results via XML file
- Built-in search function
- View services of remote computers
- Send messages to computers remotely
- Context menus
- Performance has been enhanced greatly
- Ability to add local administrators
ACSA Requirements:
- Powershell v2 or greater
Features:
- Connects to currently logged-in domain on startup or domain set in XML file
- Search for PC - Search Active Directory for computers matching the string in the textbox
- System Info - Gathers info about PC, user session, make/model, hardware, OS, and networking
- Local Admins - Enumerates local administrators and allows you to add or remove them
- Applications - Enumerates installed software and allows you to uninstall
- Startup Items - Enumerates startup items and allows you to remove them
- Processes - Enumerates running processes and allows you to kill them
- Services - Enumerates services
- Remote Desktop - Remote desktop into computer
- Remote Assistance - Initiate remote assistance session with remote computer
- View C Drive - Opens explorer to the C drive of remote computer
- Send Message - Sends a message to all users on remote computer
- Restart Computer - Restarts remote computer (Includes confirmation)
- File Menu
- Connect to domain... - Connect to a different domain
- View Menu
- View WSUS logs
- View Event Viewer
- View Services
- View Local Users/Groups MMC
Usage: Download AWSA.zip and unblock the file (Right-click, Properties and unblock). Unzip AWSA.zip and open the AWSA.Options.xml file in Notepad to modify any settings. To use the GUI, right-click the AWSA.ps1 script and select 'Run with PowerShell'. Once the GUI loads, type in a partial computer name to search for it in Active Directory. Right-click on a computer in the listbox and select it to move the name into the textbox. If you already know the name of the computer you would like to manage remotely, you can type that directly into the textbox.
Download AWSA 2.0

Mr. Prescott, thanks for sharing this. It helps in our environment a lot. I was wondering how I could add a button to pull up a bunch of functions in a .psm1 and be able to select them to run.
ReplyDeleteIf it is a small list of functions, I would recommend using a drop-down menu. You can look at the other menus used in the tool as examples. If there are a lot of functions that you want to list, it would be easier to use something similar to this: 'Get-Command -Module Sotghalz.psm1' and then add each of the function names to the listview. Once it is in the listview, you can create a context menu for 'Run Function' and use the Get-ComputerName built-in function to read the computer name from the textbox.
ReplyDeleteI was able to add the content of the psm1 to the listview and I was able to show the context "Run Function". I just can't get the actual function to run. Any ideas?
ReplyDeleteI was able to figure it out. It took some time. Your tool is going to help out in our environment. Thank you.
ReplyDeleteIs there a way to open the GUI and have the powershell running in the background as minimized or hidden from the user?
ReplyDeleteWhen I right click and run with PowerShell, nothing happens. Any ideas?
ReplyDelete@Sotghalz: Not that I am aware of.
ReplyDelete@Anon: Make sure that you have correctly set you PowerShell execution policy. You can check it by using the Get-ExecutionPolicy cmdlet.
Very nice , would it be possible to obtain what network printers are installed?
ReplyDeletethank you,
@tricky: Network printers are stored in the user's session and are not as easily retrievable as the current information provided. To find ways to retrieve this information, you can visit the TechNet ScriptCenter @ http://gallery.technet.microsoft.com/scriptcenter
ReplyDeleteHi Mr. Rich Prescott
ReplyDeleteThanks to you for crating and posting this script in the TechNet Script directory.
I found this script very useful for me but I have some question for you.
• Is it possible that when I run this script it will not show the PowerShell console, it show only the GUI console.
• I am not able to send the text message from this script
• Is it possible to add one more button “Force Policy” using which I can force GPO on remote computer.
This tool and code behind it have been quite helpful, thank you!
ReplyDeleteSubodh - What client OS are you sending the message to? If these are Windows 7 (or Vista, I assume), look at the HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server AllowRemoteRPC value. This may need to be set to 1.
@AnonJan20: You're welcome.
ReplyDelete@Sudobh: I am not aware of a way to hide the console. And yes, there is a way to 'Force Policy', which was included in the original release of this GUI, but it required the PSExec tool from Sysinternals. There is also an option of using PSRemoting, but I am trying to keep the tool as simple as possible.
Thanks it worked for me.
ReplyDeleteCan I send message to multiple users in one time,
Is there any command for sending this message ?
This Admin Tool will not run on Windows XP SP3. I get the following:
ReplyDeleteFile C:\AWSA\AWSA.ps1 cannot be loaded. The file C:\AWSA\AWSA.ps1 is not digitally signed. The script will not execute
on the system. Please see "get-help about_signing" for more details..
At line:1 char:11
+ .\AWSA.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
@Anon: The admin tool works fine on XP. That error has to do with your execution policy. Please read the information referenced in the error to determine which execution policy is best for your situation. Here is the command that should be run to get more details:
ReplyDeleteget-help about_signing
Hi Prescott, unable retrive application information due to failed issue. Any idea?
ReplyDelete@Anon: I would need to have more information to troubleshoot, but it sounds like you either input a wrong computer name or do not have admin rights on the remote machine.
ReplyDeleteIs there a version like this for linux administration to remote computers? I made a gui like this and would love to display a SSH (putty) session in this gui but i cant figure out how to embed the session in the gui. Is this even possible? How can I tailor something like this to the LINUX admin? Thanks for the help. Love your blog.
ReplyDeleteI do not make a version of this for Linux computers. There is what is called a Community Promise for PowerShell, which allows it to be ported to Linux, but nobody has taken on the task.
ReplyDelete* hmmm i it looks handy piece of software you have created would be nice to browse for a computer to select, which is broken down to do search by OU or group, and possible a new feature that did the job of regmon and filemon, i know there process explorer but i know with the old pro version they allowed to connect to another computer with network and monitor that but this new one process monitor (if that what i remember it called) seems to be all local based and it seems to be be more memory hungry
ReplyDeletebut keep up the good work
Awesome tool, I'm going to run a demo at our next team meeting. One question, when trying to send a message nothing happens. In the cmd running behind the program I see "Error 5 getting session names". Whats going on there?
ReplyDeleteThe main use case for this feature was for sending messages to users of terminal servers, which works by default. If you would also like to use this feature for client systems, the following registry key must be enabled on the remote machine to receive the message.
ReplyDeleteHKLM\SYSTEM\CurrentControlSet\Control\Terminal Server
Name : AllowRemoteRPC
Type : REG_DWORD
Value : 1
Note: This change requires a reboot.
It's seems your work was shown on the message board edugeek, and seems alot of praise keep up the work, probably have lot of feeddback and tips since it used quite reglar
ReplyDeleteAwesome script/utility! I was hoping that it would have a way to export the data it collects into a .xlsx or .csv output file, so as a workaround, I just take print screens, lol.
ReplyDeleteHelllo Rich,
ReplyDeleteUsing your script on my networked Windows 7 64bit PC, I could not retrieve anything. The error shown at the bottom status bar of GUI reads something like: [altiris-console.engineeredair.com] The RPC server is unavailable. (Exception from HRESULT:0x800706BA). The target client that I want to get the info from is a windows xp SP3 and that I did add the registry key AllowRemoteRPC as you mentioned on April 6, 2012. Your help to troubleshoot this is much appreciated.
Lac
Hello,
ReplyDeleteNevermind the question I asked on May 25, 2012. I have found the answer for it. It was simply the windows firewall that block to connection. This script/program is truely fanstastic. Thank you for your great work.
Nothing happens when i run this, Windows 7 32bit. Where are you supposed to run "get-help about_signing" to check for the policy?
ReplyDeleteHow would one add the gpupdate back? I looked at both versions of your tool and they use different structure. I tried several different ways, none of which worked. I understand the need for simplistic tools but it would be nice for the gpupdate be readded, even at the expense of psexec tools.
ReplyDelete"With the improvements in the tools provided with or available for modern operating systems, the need to write scripts to assist in administering or investigating computer systems has been significantly reduced or even eliminated."
ReplyDeletethis is a statement i have been for one of my university's assignment, i have to produce an argument for and against please help me !!!
Many thanks
You'd probably be better off asking that on one of the scripting forums.
DeleteHi Rich
ReplyDeleteLike your code but it is not working for me !
I am getting the following on the PS console:
You cannot call a method on a null-valued expression.
At C:\Temp2\AWSA.ps1:479 char:4
+ $vbError = $vbmsg.popup("This feature is not supported on
Windows XP.",0,"Inf ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Many thanks
Also getting same error on Win 7 64Bit machine
ReplyDeleteYou cannot call a method on a null-valued expression.
At C:\Temp2\AWSA.ps1:535 char:43
+ ForEach ($Sel in $lvMain.SelectedItems){($Info | ?{$_.Name -eq
$Sel.Text}).Uni ...
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Send a message and restart computer did no work for me!
ReplyDeletehow can i get them work?
thanks
Hello,
ReplyDeleteI'm having some issues running this script as an alternative user. Maybe I'm being a tit.
I'm calling the script from a batch file using:
RunAs /u:domain/user "powershell -file .\AWSA.ps1"
Any ideas where I'm going wrong?
Thank you!
RunAs /user:domain\user "powershell -file .\AWSA.ps1"
DeleteI am trying to add a button to collect system events. I have the button in place but am getting errors when running it:
ReplyDeleteNew-Object : Multiple ambiguous overloads found for "ListViewItem" and the
argument count: "1".
At C:\Users\archec\Desktop\AWSA\AWSA.ps1:631 char:12
+ $Item = New-Object System.Windows.Forms.ListViewItem($_.$Col0)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodExcepti
on
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerS
hell.Commands.NewObjectCommand
You cannot call a method on a null-valued expression.
At C:\Users\archec\Desktop\AWSA\AWSA.ps1:632 char:79
+ ForEach ($Col in ($lvMain.Columns | ?{$_.Index -ne 0})){$Field =
$Col.Text;$I ...
+
~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At C:\Users\archec\Desktop\AWSA\AWSA.ps1:632 char:79
+ ForEach ($Col in ($lvMain.Columns | ?{$_.Index -ne 0})){$Field =
$Col.Text;$I ...
+
~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At C:\Users\archec\Desktop\AWSA\AWSA.ps1:632 char:79
+ ForEach ($Col in ($lvMain.Columns | ?{$_.Index -ne 0})){$Field =
$Col.Text;$I ...
+
~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Exception calling "Add" with "1" argument(s): "Object reference not set to an
instance of an object."
At C:\Users\archec\Desktop\AWSA\AWSA.ps1:633 char:4
+ $lvMain.Items.Add($Item)
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NullReferenceException
I am fairly new to PoSh so if this is a simple newb fix feel free to make fun of me if you feel it is necessary. I did add properties for SystemEvents to the xml file as well. Here is the code for the click event:
$btnSysEvents_Click={
Get-ComputerName
Initialize-Listview
$SBPStatus.Text = "Retrieving System Events..."
Update-ContextMenu (Get-Variable cmsSysEvent*)
$XML.Options.SystemEvents.Property | %{Add-Column $_}
Resize-Columns
$Col0 = $lvMain.Columns[0].Text
$Info = Get-EventLog System -ComputerName $ComputerName -Newest 25 -EntryType Error,Warning | Sort TimeGenerated
Start-Sleep -m 250
if($SysError){$SBPStatus.Text = "[$ComputerName] $SysError"}
else{
$Info | %{
$Item = New-Object System.Windows.Forms.ListViewItem($_.$Col0)
ForEach ($Col in ($lvMain.Columns | ?{$_.Index -ne 0})){$Field = $Col.Text;$Item.SubItems.Add($_.$Field)}
$lvMain.Items.Add($Item)
}
$SBPStatus.Text = "Ready"
}
Thanks for any help you can give...
I figured it out...I had to explicitly cast these as strings:
ReplyDeleteTimeGenerated = [String]$event.TimeGenerated
EntryType = [String]$event.EntryType
Source = [String]$event.Source
EventID = [String]$event.EventID
I guess I should also show that I changed the code as follows:
ReplyDelete$btnSysEvents_Click={
Get-ComputerName
Initialize-Listview
$SBPStatus.Text = "Retrieving System Events..."
Update-ContextMenu (Get-Variable cmsSysEvent*)
$XML.Options.SystemEvents.Property | %{Add-Column $_}
Resize-Columns
$Col0 = $lvMain.Columns[0].Text
$Info = @()
$SystemEvents = Get-EventLog -ComputerName $computername -LogName System -EntryType Error,Warning
foreach ($event in $SystemEvents) {
$Member = New-Object PSObject -Property @{
TimeGenerated = [String]$event.TimeGenerated
EntryType = [String]$event.EntryType
Source = [String]$event.Source
EventID = [String]$event.EventID
}
$Info += $Member
}
Start-Sleep -m 250
if($SysError){$SBPStatus.Text = "[$ComputerName] $SysError"}
else{
$Info | %{
$Item = New-Object System.Windows.Forms.ListViewItem($_.$Col0)
ForEach ($Col in ($lvMain.Columns | ?{$_.Index -ne 0})){$Field = $Col.Text;$Item.SubItems.Add($_.$Field)}
$lvMain.Items.Add($Item)
}
$SBPStatus.Text = "Ready"
}
}
Hello,
ReplyDeleteThank you for this very useful tool, I think it's amazing.
One issue I have with it is I noticed that User Logon seems to be the last time explorer.exe process started. I tested this by login on to computer, running Admin Tool to collect System Info (button). I killed explorer.exe process then started it using Task Manager. Re-ran Admin Tool and it now shows different time for user logon.
Is this a bug or is this how the tool functions? If this is how the tool functions then admins can't rely on this piece of information as it is inaccurate.
Thank you!