BITS Transfers via PowerShell
I’ve recently decided to make a change and move over from client automation / deployment to the server side. I’ll be doing similar functions just on servers now instead of on workstations. Automation is automation if you ask me. It doesn’t really matter where it’s done. Given the change I’ve found that I’ll probably need to pick up PowerShell now so I started fooling around with it a little. I started simple with just configuring static network information and renaming network connections based on a certain standard. That was ok, but done mostly via WMI in PowerShell. I’ve already done a lot with WMI in VBScript, so it was only partially satisfying. While it was a good start to ease in, I wanted something that was all PowerShell. Then someone posed a question to me about transferring files via BITS. I’ve never done anything programmatic with BITS before and found a nice little stash of BITS cmdlets within PowerShell! That was my chance to do something new. While it’s not perfect it’s one of the only BITS scripts I could find that starts a transfer asynchronously and waits until the files are transferred then completes the job automatically while giving status along the way. The only gotcha is it needs to run as “the administrator” on Windows 7 and Server 2008, I’ve not tested it on Vista but I’d assume you’d need to do the same on that. Not all functions need to be run as admin. Just creating a transfer job doesn’t need it, but when you start getting into suspending, resuming, checking status, etc it’s needed. That being the case I think it’s just easier to say if you’re going to run it, just do a “Run as Administrator”. Because of the signing rules with PowerShell I’ll just post the code for it and let you copy and paste it into a file yourself.
Quick feature run down:
- Create BITS job asynchronously and wait for it to complete giving status along the way.
- Percent complete
- Number of total files to copy and how many have completed.
- Total bytes to copy and how much has been copied so far.
- Use wild cards for your source if you want to copy multiple files.
- Suspend, Resume, Complete, or Cancel existing BITS jobs.
I’ve used the script to copy *.csv or *.exe or my favorite *m* (every file with an “m” in the name somewhere). Granted you can’t do the combos above in one job but you can do them in multiple jobs. If I want to run multiple jobs I’ll just create a new one and then while the progress is showing hit Ctrl+C to break out and start the next. The down side to this is the job(s) will not auto-complete now, but that’s why I added the –status and –complete switches. I just check back later with a –status and all of the jobs marked as “transferred” I run it again with a –complete [Job Name].
Speaking of switches these are the ones I’ve made available:
- [ScriptName] -create ‘[Job Name]’ ‘[Source]’ ‘[Destination Folder]’
- Creates a BITS transfer job and waits until it finishes so it can automatically complete it (hit Ctrl+C during the status output to cancel the script. The created job will continue, but it won’t auto complete). Spaces are ok in any of the parameters you just must enclose them in quotes, single or double it doesn’t matter which.
- [ScriptName] -status
- Gets the current status of existing BITS jobs.
- [ScriptName] –complete ‘[Job Name}’
- Completes the job specified by the parameter.
- [ScriptName] –suspend ‘[Job Name]’
- Suspended or pauses the job name specified. It will need to be either canceled or resumed later.
- [ScriptName] –resume ‘[Job Name]’
- Resumes an existing suspended BITS job.
- [ScriptName] –cancel ‘[Job Name]’
- Cancels the specified job. It can be currently running or suspended.
- [ScriptName] –help
- Displays help info and switch syntax.
================= PowerShell Code =================
Import-Module BitsTransfer
If($args.Count -lt 1 -or $args[0] -eq “-help”)
{
“”
“================================================================”
“To create a transfer job:”
“”
“Please provide in this order: [Job Name] [Source] [Destination]“
“”
“Example: ” + $MyInvocation.MyCommand.definition + ” ‘Test Copy’ ‘C:\Source Test\*’ C:\Destination\”
“”
“The above example will copy all FILES from the source folder to the destination folder. Only files are copied, folders are NOT copied.”
“”
“NOTE: If parameters have spaces in them, they MUST have quotes around the parameter. It doesn’t matter if they are single or double quotes.”
“”
“================================================================”
“”
“To view job(s) status:”
“”
“Example: ” + $MyInvocation.MyCommand.definition + ” -status”
“”
“================================================================”
“”
“To complete transfered job(s):”
“”
“Please provide in this order: -complete [Job Name]“
“”
“Example: ” + $MyInvocation.MyCommand.definition + ” -complete ‘Test Copy’”
“”
“================================================================”
“”
“To view job(s) status:”
“”
“Example: ” + $MyInvocation.MyCommand.definition + ” -status”
“”
“================================================================”
“”
“To suspend a job:”
“”
“Please provide in this order: -suspend [Job Name]“
“”
“Example: ” + $MyInvocation.MyCommand.definition + ” -suspend ‘Test Copy’”
“”
“================================================================”
“To resume a suspended job(s):”
“”
“Please provide in this order: -resume [Job Name]“
“”
“Example: ” + $MyInvocation.MyCommand.definition + ” -resume ‘Test Copy’”
“”
“================================================================”
“To cancel a job:”
“”
“Please provide in this order: -cancel [Job Name]“
“”
“Example: ” + $MyInvocation.MyCommand.definition + ” -cancel ‘Test Copy’”
“”
“================================================================”
Exit
}
If($args -eq “-complete”)
{
$bitsJob = Get-BitsTransfer -AllUsers -Name $args[1]
Complete-BitsTransfer -BitsJob $bitsJob
If($Error.Count -eq 0)
{
“”
$args[1] + ” completed….”
“”
}
Get-BitsTransfer -AllUsers
$Error.Clear()
}
If($args -eq “-status”)
{
$bitsJobs = Get-BitsTransfer -AllUsers
ForEach($job in $bitsJobs)
{
“************************************************************************”
“”
“Job Name: ” + $job.DisplayName
“Job Start Time: ” + $job.CreationTime
“Job State: ” + $job.JobState
“Files Copied: ” + $job.FilesTransferred + ” of ” + $job.FilesTotal
If($job.BytesTotal -ne 0)
{
$bitsStatus = $job.BytesTransferred / $job.BytesTotal
“Percent Complete: {0:P1}” -f $bitsStatus
}
“Copied: ” + $job.BytesTransferred + ” of ” + $job.BytesTotal + ” Bytes”
“”
}
“************************************************************************”
}
If($args -eq “-suspend”)
{
$bitsJob = Get-BitsTransfer -AllUsers -Name $args[1]
Suspend-BitsTransfer $bitsJob
If($Error.Count -eq 0)
{
“”
$args[1] + ” suspended….”
“”
}
$Error.Clear()
}
If($args -eq “-resume”)
{
$bitsJob = Get-BitsTransfer -AllUsers -Name $args[1]
Resume-BitsTransfer $bitsJob -Asynchronous
If($Error.Count -eq 0)
{
“”
$args[1] + ” resumed….”
“”
}
Get-BitsTransfer -AllUsers
$Error.Clear()
}
If($args -eq “-cancel”)
{
$bitsJob = Get-BitsTransfer -AllUsers -Name $args[1]
Remove-BitsTransfer $bitsJob
If($Error.Count -eq 0)
{
“”
$args[1] + ” canceled….”
“”
}
Get-BitsTransfer -AllUsers
$Error.Clear()
}
Function StartFileTransfer
{
$bitsCopy = Start-BitsTransfer -DisplayName $bitsJobName -source $bitsSource -Destination $bitsDestination -Asynchronous
$bitsStartTime = $bitsCopy.CreationTime
Do
{
Clear-Host
“****** BITS Job ” + $bitsJobName + ” ******”
$bitsStatus = $bitsCopy.BytesTransferred / $bitsCopy.BytesTotal
“Job Start Time: ” + $bitsStartTime
“Job Name: ” + $bitsJobName
“Transfering: ” + $bitsSource + ” to ” + $bitsDestination
“Currently copying file ” + $bitsCopy.FilesTransferred + ” of ” + $bitsCopy.FilesTotal
“Percent Complete: {0:P1}” -f $bitsStatus
“Copied: ” + $bitsCopy.BytesTransferred + ” of ” + $bitsCopy.BytesTotal + ” Bytes”
sleep -Milliseconds 500
}
Until($bitsCopy.JobState -eq “transferred”)
“Percent Complete: 100.0 %” + ” ” + $bitsCopy.FilesTransferred + ” of ” + $bitsCopy.FilesTotal + ” files copied.”
“Commiting Job: ” + $bitsJobName
$bitsEndTime = $bitsCopy.TransferCompletionTime
Complete-BitsTransfer -BitsJob $bitsCopy
“Job End Time: ” + $bitsEndTime
“****** BITS Job ” + $bitsJobName + ” Completed ******”
}
If($args -eq “-create”)
{
$bitsJobName = $args[1]
$bitsSource = $args[2]
$bitsDestination = $args[3]
$fileCount = -1
StartFileTransfer
}
New Admin Console….
I posted a poll asking how many people either are made to or currently use separate accounts for their normal day to day activities and their administrative tasks. By day to day I mean email, surfing, and general app usage “normal” user activities. Administrative activities I classify as things like, but not limited to, managing AD or objects in AD, remotely supporting a device, etc.
The separation of duties, I call it that at least, question has been around for a while. I was first introduced to it probably about 9-10 years ago when the company I was working for implemented it. At the time it was new and not “how we’re always done things”. It was going to take longer to do things and just generally be a nuisance was how it was viewed by many. I’ll admit I was one of those people. After a month or so it just became normal and I didn’t think much about it after that. After moving on from there my next two companies didn’t separate accounts. It was wonderful no more RunAs! Then something happened. Because someone’s account was their only account they were surfing the net and they introduced a virus into our environment. Ok, it happens. The problem really occurred because this person was an administrator with write access to Sysvol. They had been out on Sysvol earlier in the day for whatever reason but still had an active connection. Well, this virus did a couple things but what got us was it checked all locally attached devices and network connections for scripts, batch files, etc that could be replaced with a copy of itself or malicious code. Because this person had a connection still established to Sysvol it found a logon script from our main user GPO and replaced it. Domain replication started to take care of the rest. So to make a long story short if someone rebooted or just logged out and back in of their machine and the logon script processed the virus could spread very fast. So I know this is one of those “what are the odds” events, but still it stuck with me. I’m a very big supporter of separating accounts now. It could have been prevented, well slowed down at least, if this person’s “normal” account didn’t have write access to Sysvol.
Fast forward to today and I’m in an environment that has separate accounts which I’m happy about. It’s been years since I’ve needed to use RunAs though so there was an adjustment time to it. Again I didn’t like constantly using RunAs and I didn’t want to just leave everything open all the time, but I understood why it was important. So I decided there has to be a better way. So I threw a new tool together, I call it simply Admin Console. It’s really a simple concept. It’s a collection of command lines defined by the user stored in your Current User registry hive. I do a RunAs on it, then everything that launches out if it is running in the context of the account used for the RunAs. I now do a RunAs once a day unless I mistakenly close it.
I’ve attached a screenshot of the tool and I’ve a link to the tool itself. Keep in mind I’m NOT a developer so if it doesn’t work I can try to help but it may take me some time. I’ve used it on Windows 7 32bit and Windows XP SP3 32bit without problems. It’s still a work in progress but it generally works well.
Let me know your thoughts on the tool or about separation of accounts….
http://www.box.net/shared/k0rfclrah7
I’m Back….
Well, I’ve been away for a while. I’m planning on being back to a regular posting schedule. I’m hoping to do at least one post a week and more if I can.
It’s been a busy year; I’m still adjusting to having a now ~15 month old running around the house. I’ve gotten some exposure to some new technology in that time too. I’m back in a SCCM shop after being away for a year and a half. It’s a welcome return, just like riding a bike too I’m finding. I’ve started using SCVMM, I’m sure I’ll write something on that at some point. For now I’ll just say it’s not bad, but missing some key features in my opinion. Looks like I’ll be heading down the Citrix trail sometime in 2011 too, both XenApp and XenDesktop.
My first normal post should be up around mid-week. I’ve put up a poll to see how IT people work day to day. I’m interested in how companies are handling their IT user account provisioning and what IT people think about it.
PowerShell Execution Policies
My last post talked about PowerShell execution policies briefly. I thought I’d do a quick post on what those are and what they mean.
There are 4 PowerShell execution policies:
Restricted:
• No scripts are allowed to run regardless of location.
• This is the default execution policy.
• Running commands from a PowerShell window is allowed.
Unrestricted:
• Unsigned scripts are allowed to run, all scripts can run.
• You will still be prompted if scripts are not run from the local computer.
AllSigned:
• Scripts that are digitally signed are allowed to run.
• Prompts you before running scripts from trusted publishers.
• You will still be prompted if scripts are not run from the local computer.
RemoteSigned:
• Scripts that are digitally signed are allowed to run from a trusted publisher can run.
• Does not require digital signatures on scripts run from the
local computer.
• Does not prompt you before running scripts from trusted publishers.
• You will still be prompted if scripts are not run from the local computer.
MDT 2010, Server 2008 & Roles and Features
I’ve spent some time with MDT 2010 deploying Server 2008 & Windows 7. I can build a Server 2008 x86, x64, or R2 server with minimal interaction. Basically boot, enter a name, select the task sequence and walk away. While setting this up I started thinking about roles and features. The stock MDT ability to add roles and features is nice, I like it, but it’s not as flexible as I want. I don’t want a bunch of different task sequences for different roles and features. Granted the core would be the same, but there must be a cleaner way.
What I did was create applications, and sometimes bundles, to handle installing roles and features. That way I have minimal task sequences and all I need to do to build a Server 2008 R2 server with IIS, Hyper-V, and Windows Process Activation Service all I do is select them from the application list. (Note: I haven’t actually tried that combination, it’s just an example.) This can all be done with a little two-line powershell script for each role or feature. Even better I just created a folder under applications in the MDT console and called it Server Roles & Features. I’m still in process of gathering prerequisites for all the roles and features, I’ve come across some like the server must be part of a domain before installing Remote Desktop Services & the processor must support hardware virtualization for Hyper-V, etc. The only one I’ve hit so far that won’t install is WSUS.
This is the powershell code to do it:
#######################################################################
#Import the Server Manager command console to use later to add, remove, or query features or roles.
import-module servermanager
#Add Windows features or roles by passing the component name to the add-windowsfeature cmd. Use a comma to seperate multiple features.
# This example is installing default IIS and Windows Process Activation Service. Some components require a reboot before more can be installed.
add-windowsfeature Web-Server, WAS
#######################################################################
Basically copy that code into notepad and save it as .ps1 and that’s it. There is one caveat with this; with making no changes out of the box to Server 2008 powershell may be configured to restricted mode. That means no powershell scripts will run period. To get around that I went into my task sequence and during the State Restore phase I added a command line item called “Enable Powershell” it’s just running “powershell.exe -Command Set-ExecutionPolicy Unrestricted -force” or you could also use RemoteSigned. Then depending on your environment you can just copy that item and place it at the end to lock powershell back down if needed by setting back to Restricted or something else. The other item of note, if you are doing a LTI deployment or your PowerShell script is running from a UNC location you’ll need to add that location one of the more open IE zones during the build. I just added my deployment server to the Intranet zone because this is all happening prior to joining a domain. Even if you change the execution policy to unrestricted it will still prompt you to allow because it’s running from a remote location.
When I was talking to someone about this they asked about how did I know IIS is called Web-Server and Windows Process Activation Service was called WAS? Well, I used the query cmdlet to get all that and dumped it to a spreadsheet. I’ll include that info at the end of this post.
This post has been a little disjointed, so if anyone has questions feel free to ask or if people want some screen shots I could post those later. Here’s the dump of feature display names and short names:
| Display Name | Name | |
| [ ] Active Directory Certificate Services | AD-Certificate | |
| [ ] Certification Authority | ADCS-Cert-Authority | |
| [ ] Certification Authority WEB Enrollment | ADCS-WEB-Enrollment | |
| [ ] Online Responder | ADCS-Online-Cert | |
| [ ] Network Device Enrollment Service | ADCS-Device-Enrollment | |
| [ ] Certificate Enrollment WEB Service | ADCS-Enroll-WEB-Svc | |
| [ ] Certificate Enrollment Policy WEB Service | ADCS-Enroll-WEB-Pol | |
| [ ] Active Directory Domain Services | AD-Domain-Services | |
| [ ] Active Directory Domain Controller | ADDS-Domain-Controller | |
| [ ] Identity Management for UNIX | ADDS-Identity-Mgmt | |
| [ ] Server for Network Information Services | ADDS-NIS | |
| [ ] Password Synchronization | ADDS-Password-Sync | |
| [ ] Administration Tools | ADDS-IDMU-Tools | |
| [ ] Active Directory Federation Services | AD-Federation-Services | |
| [ ] Federation Service | ADFS-Federation | |
| [ ] Federation Service Proxy | ADFS-Proxy | |
| [ ] AD FS WEB Agents | ADFS-WEB-Agents | |
| [ ] Claims-aware Agent | ADFS-Claims | |
| [ ] Windows Token-based Agent | ADFS-Windows-Token | |
| [ ] Active Directory Lightweight Directory Services | ADLDS | |
| [ ] Active Directory Rights Management Services | ADRMS | |
| [ ] Active Directory Rights Management Server | ADRMS-Server | |
| [ ] Identity Federation Support | ADRMS-Identity | |
| [ ] Application Server | Application-Server | |
| [ ] .NET Framework 3.5.1 | AS-NET-Framework | |
| [ ] WEB Server (IIS) Support | AS-WEB-Support | |
| [ ] COM+ Network Access | AS-Ent-Services | |
| [ ] TCP Port Sharing | AS-TCP-Port-Sharing | |
| [ ] Windows Process Activation Service Support | AS-WAS-Support | |
| [ ] HTTP Activation | AS-HTTP-Activation | |
| [ ] Message Queuing Activation | AS-MSMQ-Activation | |
| [ ] TCP Activation | AS-TCP-Activation | |
| [ ] Named Pipes Activation | AS-Named-Pipes | |
| [ ] Distributed Transactions | AS-Dist-Transaction | |
| [ ] Incoming Remote Transactions | AS-Incoming-Trans | |
| [ ] Outgoing Remote Transactions | AS-Outgoing-Trans | |
| [ ] WS-Atomic Transactions | AS-WS-Atomic | |
| [ ] DHCP Server | DHCP | |
| [ ] DNS Server | DNS | |
| [ ] Fax Server | Fax | |
| [ ] File Services | File-Services | |
| [ ] File Server | FS-FileServer | |
| [ ] Distributed File System | FS-DFS | |
| [ ] DFS Namespaces | FS-DFS-Namespace | |
| [ ] DFS Replication | FS-DFS-Replication | |
| [ ] File Server Resource Manager | FS-Resource-Manager | |
| [ ] Services for Network File System | FS-NFS-Services | |
| [ ] Windows Search Service | FS-Search-Service | |
| [ ] Windows Server 2003 File Services | FS-Win2003-Services | |
| [ ] Indexing Service | FS-Indexing-Service | |
| [ ] BranchCache for network files | FS-BranchCache | |
| [ ] Hyper-V | Hyper-V | |
| [ ] Network Policy and Access Services | NPAS | |
| [ ] Network Policy Server | NPAS-Policy-Server | |
| [ ] Routing and Remote Access Services | NPAS-RRAS-Services | |
| [ ] Remote Access Service | NPAS-RRAS | |
| [ ] Routing | NPAS-Routing | |
| [ ] Health Registration Authority | NPAS-Health | |
| [ ] Host Credential Authorization Protocol | NPAS-Host-Cred | |
| [ ] Print and Document Services | Print-Services | |
| [ ] Print Server | Print-Server | |
| [ ] LPD Service | Print-LPD-Service | |
| [ ] Internet Printing | Print-Internet | |
| [ ] Distributed Scan Server | Print-Scan-Server | |
| [ ] Remote Desktop Services | Remote-Desktop-Services | |
| [ ] Remote Desktop Session Host | RDS-RD-Server | |
| [ ] Remote Desktop Virtualization Host | RDS-Virtualization | |
| [ ] Remote Desktop Licensing | RDS-Licensing | |
| [ ] Remote Desktop Connection Broker | RDS-Connection-Broker | |
| [ ] Remote Desktop Gateway | RDS-Gateway | |
| [ ] Remote Desktop WEB Access | RDS-WEB-Access | |
| [ ] WEB Server (IIS) | WEB-Server | |
| [ ] WEB Server | WEB-WEBServer | |
| [ ] Common HTTP Features | WEB-Common-Http | |
| [ ] Static Content | WEB-Static-Content | |
| [ ] Default Document | WEB-Default-Doc | |
| [ ] Directory Browsing | WEB-Dir-Browsing | |
| [ ] HTTP Errors | WEB-Http-Errors | |
| [ ] HTTP Redirection | WEB-Http-Redirect | |
| [ ] WEBDAV Publishing | WEB-DAV-Publishing | |
| [ ] Application Development | WEB-App-Dev | |
| [ ] ASP.NET | WEB-Asp-Net | |
| [ ] .NET Extensibility | WEB-Net-Ext | |
| [ ] ASP | WEB-ASP | |
| [ ] CGI | WEB-CGI | |
| [ ] ISAPI Extensions | WEB-ISAPI-Ext | |
| [ ] ISAPI Filters | WEB-ISAPI-Filter | |
| [ ] Server Side Includes | WEB-Includes | |
| [ ] Health and Diagnostics | WEB-Health | |
| [ ] HTTP Logging | WEB-Http-Logging | |
| [ ] Logging Tools | WEB-Log-Libraries | |
| [ ] Request Monitor | WEB-Request-Monitor | |
| [ ] Tracing | WEB-Http-Tracing | |
| [ ] Custom Logging | WEB-Custom-Logging | |
| [ ] ODBC Logging | WEB-ODBC-Logging | |
| [ ] Security | WEB-Security | |
| [ ] Basic Authentication | WEB-Basic-Auth | |
| [ ] Windows Authentication | WEB-Windows-Auth | |
| [ ] Digest Authentication | WEB-Digest-Auth | |
| [ ] Client Certificate Mapping Authentic… | WEB-Client-Auth | |
| [ ] IIS Client Certificate Mapping Authe… | WEB-Cert-Auth | |
| [ ] URL Authorization | WEB-Url-Auth | |
| [ ] Request Filtering | WEB-Filtering | |
| [ ] IP and Domain Restrictions | WEB-IP-Security | |
| [ ] Performance | WEB-Performance | |
| [ ] Static Content Compression | WEB-Stat-Compression | |
| [ ] Dynamic Content Compression | WEB-Dyn-Compression | |
| [ ] Management Tools | WEB-Mgmt-Tools | |
| [ ] IIS Management Console | WEB-Mgmt-Console | |
| [ ] IIS Management Scripts and Tools | WEB-Scripting-Tools | |
| [ ] Management Service | WEB-Mgmt-Service | |
| [ ] IIS 6 Management Compatibility | WEB-Mgmt-Compat | |
| [ ] IIS 6 Metabase Compatibility | WEB-Metabase | |
| [ ] IIS 6 WMI Compatibility | WEB-WMI | |
| [ ] IIS 6 Scripting Tools | WEB-Lgcy-Scripting | |
| [ ] IIS 6 Management Console | WEB-Lgcy-Mgmt-Console | |
| [ ] FTP Server | WEB-Ftp-Server | |
| [ ] FTP Service | WEB-Ftp-Service | |
| [ ] FTP Extensibility | WEB-Ftp-Ext | |
| [ ] IIS Hostable WEB Core | WEB-WHC | |
| [ ] Windows Deployment Services | WDS | |
| [ ] Deployment Server | WDS-Deployment | |
| [ ] Transport Server | WDS-Transport | |
| [ ] Windows Server Update Services | OOB-WSUS | |
| [ ] .NET Framework 3.5.1 Features | NET-Framework | |
| [ ] .NET Framework 3.5.1 | NET-Framework-Core | |
| [ ] WCF Activation | NET-Win-CFAC | |
| [ ] HTTP Activation | NET-HTTP-Activation | |
| [ ] Non-HTTP Activation | NET-Non-HTTP-Activ | |
| [ ] Background Intelligent Transfer Service (BITS) | BITS | |
| [ ] IIS Server Extension | BITS-IIS-Ext | |
| [ ] BitLocker Drive Encryption | BitLocker | |
| [ ] BranchCache | BranchCache | |
| [ ] Connection Manager Administration Kit | CMAK | |
| [ ] Desktop Experience | Desktop-Experience | |
| [ ] DirectAccess Management Console | DAMC | |
| [ ] Failover Clustering | Failover-Clustering | |
| [ ] Group Policy Management | GPMC | |
| [ ] Ink and Handwriting Services | Ink-Handwriting | |
| [ ] Ink Support | IH-Ink-Support | |
| [ ] Handwriting Recognition | IH-Handwriting | |
| [ ] Internet Printing Client | Internet-Print-Client | |
| [ ] Internet Storage Name Server | ISNS | |
| [ ] LPR Port Monitor | LPR-Port-Monitor | |
| [ ] Message Queuing | MSMQ | |
| [ ] Message Queuing Services | MSMQ-Services | |
| [ ] Message Queuing Server | MSMQ-Server | |
| [ ] Directory Service Integration | MSMQ-Directory | |
| [ ] Message Queuing Triggers | MSMQ-Triggers | |
| [ ] HTTP Support | MSMQ-HTTP-Support | |
| [ ] Multicasting Support | MSMQ-Multicasting | |
| [ ] Routing Service | MSMQ-Routing | |
| [ ] Message Queuing DCOM Proxy | MSMQ-DCOM | |
| [ ] Multipath I/O | Multipath-IO | |
| [ ] Network Load Balancing | NLB | |
| [ ] Peer Name Resolution Protocol | PNRP | |
| [ ] Quality Windows Audio Video Experience | qWave | |
| [ ] Remote Assistance | Remote-Assistance | |
| [ ] Remote Differential Compression | RDC | |
| [ ] Remote Server Administration Tools | RSAT | |
| [ ] Role Administration Tools | RSAT-Role-Tools | |
| [ ] Active Directory Certificate Services Tools | RSAT-ADCS | |
| [ ] Certification Authority Tools | RSAT-ADCS-Mgmt | |
| [ ] Online Responder Tools | RSAT-Online-Responder | |
| [ ] AD DS and AD LDS Tools | RSAT-AD-Tools | |
| [ ] AD DS Tools | RSAT-ADDS | |
| [ ] AD DS Snap-Ins and Command-Line … | RSAT-ADDS-Tools | |
| [ ] Active Directory Administrative … | RSAT-AD-AdminCenter | |
| [ ] Server for NIS Tools | RSAT-SNIS | |
| [ ] AD LDS Snap-Ins and Command-Line Tools | RSAT-ADLDS | |
| [ ] Active Directory module for Windows … | RSAT-AD-PowerShell | |
| [ ] Active Directory Rights Management Servi… | RSAT-RMS | |
| [ ] DHCP Server Tools | RSAT-DHCP | |
| [ ] DNS Server Tools | RSAT-DNS-Server | |
| [ ] Fax Server Tools | RSAT-Fax | |
| [ ] File Services Tools | RSAT-File-Services | |
| [ ] Distributed File System Tools | RSAT-DFS-Mgmt-Con | |
| [ ] File Server Resource Manager Tools | RSAT-FSRM-Mgmt | |
| [ ] Services for Network File System Tools | RSAT-NFS-Admin | |
| [ ] Hyper-V Tools | RSAT-Hyper-V | |
| [ ] Network Policy and Access Services Tools | RSAT-NPAS | |
| [ ] Print and Document Services Tools | RSAT-Print-Services | |
| [ ] Remote Desktop Services Tools | RSAT-RDS | |
| [ ] Remote Desktop Session Host Tools | RSAT-RDS-RemoteApp | |
| [ ] Remote Desktop Gateway Tools | RSAT-RDS-Gateway | |
| [ ] Remote Desktop Licensing Tools | RSAT-RDS-Licensing | |
| [ ] Remote Desktop Connection Broker Tools | RSAT-RDS-Conn-Broker | |
| [ ] WEB Server (IIS) Tools | RSAT-WEB-Server | |
| [ ] Windows Deployment Services Tools | RSAT-WDS | |
| [ ] Feature Administration Tools | RSAT-Feature-Tools | |
| [ ] BitLocker Drive Encryption Administratio… | RSAT-BitLocker | |
| [ ] BitLocker Drive Encryption Tools | RSAT-Bitlocker-DriveEnc | |
| [ ] BitLocker Recovery Password Viewer | RSAT-Bitlocker-RecPwd | |
| [ ] BITS Server Extensions Tools | RSAT-Bits-Server | |
| [ ] Failover Clustering Tools | RSAT-Clustering | |
| [ ] Network Load Balancing Tools | RSAT-NLB | |
| [ ] SMTP Server Tools | RSAT-SMTP | |
| [ ] WINS Server Tools | RSAT-WINS | |
| [ ] RPC over HTTP Proxy | RPC-over-HTTP-Proxy | |
| [ ] Simple TCP/IP Services | Simple-TCPIP | |
| [ ] SMTP Server | SMTP-Server | |
| [ ] SNMP Services | SNMP-Services | |
| [ ] SNMP Service | SNMP-Service | |
| [ ] SNMP WMI Provider | SNMP-WMI-Provider | |
| [ ] Storage Manager for SANs | Storage-Mgr-SANS | |
| [ ] Subsystem for UNIX-based Applications | Subsystem-UNIX-Apps | |
| [ ] Telnet Client | Telnet-Client | |
| [ ] Telnet Server | Telnet-Server | |
| [ ] TFTP Client | TFTP-Client | |
| [ ] Windows Biometric Framework | Biometric-Framework | |
| [ ] Windows Internal Database | Windows-Internal-DB | |
| [ ] Windows PowerShell Integrated Scripting Environm… | PowerShell-ISE | |
| [ ] Windows Process Activation Service | WAS | |
| [ ] Process Model | WAS-Process-Model | |
| [ ] .NET Environment | WAS-NET-Environment | |
| [ ] Configuration APIs | WAS-Config-APIs | |
| [ ] Windows Server Backup Features | Backup-Features | |
| [ ] Windows Server Backup | Backup | |
| [ ] Command-line Tools | Backup-Tools | |
| [ ] Windows Server Migration Tools | Migration | |
| [ ] Windows System Resource Manager | WSRM | |
| [ ] Windows TIFF IFilter | TIFF-IFilter | |
| [ ] WinRM IIS Extension | WinRM-IIS-Ext | |
| [ ] WINS Server | WINS-Server | |
| [ ] Wireless LAN Service | Wireless-Networking | |
| [ ] XPS Viewer | XPS-Viewer |
I call it Remote View…
How many times has someone come up and asked “I’m having a problem with <insert device here>.” Wouldn’t it be nice to be able to know what processes or services are running right now? Who’s logged in, when it was last booted, what’s installed, and other things? Wouldn’t also be great to get all that information in real-time? I got a call from a support person once who claimed a process was “hung” and he wanted to kill it. I told him to wait and used the tool to watch the running processes from my desk. I watched the process exit and told him “ok it’s done, you should be fine.” He started to say “how do you know it’s….. Oh wait its gone. It’s done. How’d you know that?” Of course my answer was “its magic”. All I did was watch the process in question and watched the memory usage change, as I watched it go down I was then able to see the process disappear from the list. MAGIC!!!
I got sick and tired of people asking for help, but giving zero information. So I wrote a series of scripts to get information, general info (make, model, etc), installed apps, patches, etc. You know the “normal” things. I then got tired of using the individual scripts and thought it’d be really cool to put everything in one console. So I did.
I’ve been working on and off on a project I call Remote View for a while. I have a 1.0 version that works, but me being me, wanted to make it better. It started as a HTA with an Excel object, I wouldn’t even call that one 1.0. That was better than a bunch of scripts, but I had a friend test it from a remote site and the performance wasn’t as good as I wanted for him. So I moved to VB. The performance was much better. Then I was able to re-write almost all the code from being WMI queries or other methods to straight VB.NET code and the performance got even better. Plus I was able to add functions that I had issues with before or didn’t even have before. That’s where it stood for a while. I still thought it could be better though. That’s when I decided that to really get what I wanted I needed to do another big re-write.
The new version, that I’m still working on, has some I think cool features:
- It’s multithreaded, no more “UI lockup” while processing. Plus now you can cancel a query if you want before it finishes. Plus a little progress bar to let you know something is still happening.
- The way connection / computer history is done it’s totally different. I can now even add notes about a computer in the history. That makes it much easier to remember why it’s in my history.
- Gathering user information has been totally redone and much faster.
- Gathering service information has been totally redone. It’s faster and gathers more information.
It’s still a work in progress, but I’m pretty happy with it so far. The one question I’m still struggling with is Event Log information. I currently have it setup to select a date from a picker and then it grabs all events from that date until now. I’ve also had it so it only grab logs from that exact date. Which do you think is better? I lean towards more information as long as the performance it’s totally trashed. I’ve attached some pictures of it from its early HTA days until today. Any comments or ideas are always welcome. Keep in mind I’m not a developer, I’m just a guy teaching myself VB in my free time…
PS… I’ve also writen a GUI for USMT and a crude how to find the owner by number of logins app that I may post info about in the future….
- This was the original version in HTA form.
- The VB.NET 1.0 Version
- The new working 2.0 version General Information screen
- The new working 2.0 version Installed Apps screen
- The new working 2.0 version User Info screen
- The new working 2.0 version Installed Patches screen
- The new working 2.0 version Process Information screen
- The new working 2.0 version Service Information screen
- The new working 2.0 version Startup Information screen
MDT 2010 & VM Player 3 Beta
So I’ve been playing with MDT 2010 for a little while now. I have to say I like the changes. I really like the new sub folder options and the profile’s idea is an interesting one. I was able to setup two totally independent distribution points, one for server & one for workstation, and Server 2008 and Windows 7 unattended builds up and running in no time. I separated them really for no technical reason, just a to do it thing. Although it is kind of nice to have them separate but in the same console. I also created separate media points for both too, makes creating VM’s quick and easy. Everything is on the .ISO and no network traffic. Gotta love: boot from a disk, enter a user name / password, give it a name and walk away. Full media is even better, boot from a disk, give it a name, walk away.
Speaking of VM’s. I’ve traditionally been a VMWare guy, but have been forced to use VPC for the last 8 months. VPC wasn’t as bad as I thought, I really miss multiple snapshots, virtual networks, and teams though. You can do snapshots in VPC but it’s a manual process and pain to do, VPC on Windows 7 is starting to move in a good direction. Finally USB support welcome to 2009. I heard about VMWare Player 3 Beta and decided to check it out. It’s basically VMWare’s answer to VPC, you can now create VM’s and multiple monitor support (which I was really surprised worked well it was just like a physical PC doing dual monitors no lag for me). I really wish we’d get the ability for 1 snapshot though. I understand not including teams and multiple snapshots because then why pay for workstation, but limited snapshots would be great.
My first blog….
This is my first blog ever, very exciting. In the future I’ll be posting tech stuff on MDT 2008/2010 (Microsoft Deployment Toolkit), Windows 7 (and probably XP I guess), maybe some Server 2008 deployment, maybe SCCM, scripting (VBS, starting on PowerShell, VB.NET), and whatever else I want. Feel free to leave comments…..









