VCL-1065
Reverted changes to update_cygwin.cmd previously committed which added an attempt to call mkgroup.exe and mkpasswd.exe with "-l localhost" arguments. Added sed.exe commands to strip the '<HOST>+ section from the beginning of lines in group and passwd if it exists.

Removed "-t rsa1" argument from ssh-keygen.exe command. Recent versions don't support this and display an error. Without the argument, the key will be generated with the default type.

Added command at the end of update_cygwin.cmd to delete the 'VCL Update Cygwin' scheduled task if it exists. It doesn't need to be called on every reboot.

Added call to Windows.pm::post_load to delete the 'VCL Post Load' scheduled task if it exists. Also added identical call to Windows.pm::create_update_cygwin_startup_scheduled_task to make sure that both the 'VCL Post Load' and 'VCL Update Cygwin' scheduled tasks don't both exist because they cause conflicts.

Added call to 8.pm::pre_capture to delete the 'VCL Update Cygwin' scheduled task if it exists before adding the 'VCL Post Load' scheduled task.

Added '/RL HIGHEST' argument to schtasks.exe call in Windows.pm::create_startup_scheduled_task. It causes the task to run with "highest privileges". This seems to have corrected issues on at least one image where update_cygwin.cmd failed to run because of what seems to be a UAC issue.

Added call to Windows.pm::create_update_cygwin_startup_scheduled_task to copy the update_cygwin.cmd file from the management node to ensure the most recent copy is used.
diff --git a/managementnode/lib/VCL/Module/OS/Windows.pm b/managementnode/lib/VCL/Module/OS/Windows.pm
index f658487..abd83bc 100644
--- a/managementnode/lib/VCL/Module/OS/Windows.pm
+++ b/managementnode/lib/VCL/Module/OS/Windows.pm
@@ -1012,6 +1012,15 @@
 
 =item *
 
+ Delete the VCL Post Load' scheduled task if it exists
+
+=cut
+
+	# Make sure the 'VCL Post Load' task is removed up if it exists to avoid conflicts
+	$self->delete_scheduled_task('VCL Post Load');
+
+=item *
+
  Call OS.pm::post_load
 
 =cut
@@ -3599,7 +3608,7 @@
 	# Run schtasks.exe to add the task
 	# Occasionally see this error even though it schtasks.exe returns exit status 0:
 	# WARNING: The Scheduled task "System Startup Script" has been created, but may not run because the account information could not be set.
-	my $command = "$system32_path/schtasks.exe /Create /RU \"$task_user\" /RP \"$task_password\" /SC ONSTART /TN \"$task_name\" /TR \"$task_command\"";
+	my $command = "$system32_path/schtasks.exe /Create /RU \"$task_user\" /RP \"$task_password\" /RL HIGHEST /SC ONSTART /TN \"$task_name\" /TR \"$task_command\"";
 	my ($exit_status, $output) = $self->execute($command);
 	if (!defined($output)) {
 		notify($ERRORS{'WARNING'}, 0, "failed to execute ssh command created scheduled task '$task_name' on $computer_node_name");
@@ -3640,6 +3649,7 @@
 	}
 	
 	my $request_state = $self->data->get_request_state_name();
+	my $node_configuration_directory = $self->get_node_configuration_directory();
 	
 	my $root_password;
 	if ($request_state =~ /(image|checkpoint)/) {
@@ -3660,8 +3670,13 @@
 		return;
 	}
 	
+	# Make sure the 'VCL Post Load' task doesn't exist or they will conflict
+	$self->delete_scheduled_task('VCL Post Load');
+	
+	# Copy the current version of update_cygwin.cmd to the computer
+	$self->copy_file_to("$SOURCE_CONFIGURATION_DIRECTORY/Scripts/update_cygwin.cmd", "$node_configuration_directory/Scripts/update_cygwin.cmd");
+
 	# Create a scheduled task to run post_load.cmd when the image boots
-	my $node_configuration_directory = $self->get_node_configuration_directory();
 	my $task_command = "$node_configuration_directory/Scripts/update_cygwin.cmd >> $node_configuration_directory/Logs/update_cygwin.log";
 	if ($self->create_startup_scheduled_task('VCL Update Cygwin', $task_command, 'root', $root_password)) {
 		$self->{created_update_cygwin_startup_scheduled_task} = 1;
diff --git a/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm b/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm
index 44196cb..1bc88e9 100644
--- a/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm
+++ b/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm
@@ -121,13 +121,15 @@
 		return;
 	}
 	
+	# Make sure the 'VCL Update Cygwin' task doesn't exist or they will conflict
+	$self->delete_scheduled_task('VCL Update Cygwin');
+	
 	# Create a scheduled task to run post_load.cmd when the image boots
-	my $task_name     = 'VCL Post Load';
 	my $task_command  = "$node_configuration_directory/Scripts/post_load.cmd > $node_configuration_directory/Logs/post_load.log";
 	my $task_user     = 'root';
 	my $task_password = $WINDOWS_ROOT_PASSWORD;
-	if (!$self->create_startup_scheduled_task($task_name, $task_command, $task_user, $task_password)) {
-		notify($ERRORS{'WARNING'}, 0, "failed to create '$task_name' scheduled task");
+	if (!$self->create_startup_scheduled_task('VCL Post Load', $task_command, $task_user, $task_password)) {
+		notify($ERRORS{'WARNING'}, 0, "failed to create 'VCL Post Load' scheduled task");
 		return;
 	}
 	
diff --git a/managementnode/tools/Windows/Scripts/update_cygwin.cmd b/managementnode/tools/Windows/Scripts/update_cygwin.cmd
index 7778303..c09d9dd 100755
--- a/managementnode/tools/Windows/Scripts/update_cygwin.cmd
+++ b/managementnode/tools/Windows/Scripts/update_cygwin.cmd
@@ -64,17 +64,24 @@
 echo.

 

 echo %TIME%: Creating new "group" file...

-C:\Cygwin\bin\mkgroup.exe -l localhost || C:\Cygwin\bin\mkgroup.exe -l > C:\Cygwin\etc\group

+C:\Cygwin\bin\mkgroup.exe -l > C:\Cygwin\etc\group

 echo ERRORLEVEL: %ERRORLEVEL%

 set /A STATUS+=%ERRORLEVEL%

 echo.

 

-echo %TIME%: Creating new "passwd" file and changing root's primary group from 'None' to 'None'

-C:\Cygwin\bin\mkpasswd.exe -l localhost || C:\Cygwin\bin\mkpasswd.exe -l | C:\Cygwin\bin\sed.exe -e 's/\(^root.*:\)513\(:.*\)/\1544\2/' > C:\Cygwin\etc\passwd

+echo %TIME%: Creating new "passwd" file

+C:\Cygwin\bin\mkpasswd.exe -l > C:\Cygwin\etc\passwd

 echo ERRORLEVEL: %ERRORLEVEL%

 set /A STATUS+=%ERRORLEVEL%

 echo.

 

+rem Remove leading computer name: VCLV98-249+root: --> root:

+C:\Cygwin\bin\sed.exe -i -e "s/^[^:]\++//" /etc/group

+C:\Cygwin\bin\sed.exe -i -e "s/^[^:]\++//" /etc/passwd

+

+rem Change root's primary group from 'None' to 'Administrators'

+C:\Cygwin\bin\sed.exe -i -e "s/\(^root:.*:\)\(513\|197121\)\(:.*\)/\1544\3/" /etc/passwd

+

 echo ----------------------------------------------------------------------

 

 echo %TIME%: Restoring ownership of /etc/ssh* files...

@@ -115,7 +122,7 @@
 echo.

 

 echo %TIME%: Regenerating /etc/ssh_host_key...

-C:\Cygwin\bin\bash.exe -c 'C:/Cygwin/bin/ssh-keygen.exe -t rsa1 -f /etc/ssh_host_key -N ""' 2>&1

+C:\Cygwin\bin\bash.exe -c 'C:/Cygwin/bin/ssh-keygen.exe -f /etc/ssh_host_key -N ""' 2>&1

 echo ERRORLEVEL: %ERRORLEVEL%

 set /A STATUS+=%ERRORLEVEL%

 echo.

@@ -134,6 +141,29 @@
 

 echo ----------------------------------------------------------------------

 

+echo %TIME%: Killing any cyg* processes...

+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq cyg*" 2>NUL

+echo ERRORLEVEL: %ERRORLEVEL%

+echo.

+

+echo %TIME%: Killing any ssh* processes...

+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq ssh*" 2>NUL

+echo ERRORLEVEL: %ERRORLEVEL%

+echo.

+

+echo %TIME%: Killing any bash* processes...

+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq bash*" 2>NUL

+echo ERRORLEVEL: %ERRORLEVEL%

+echo.

+

+echo %TIME%: Killing any ash* processes...

+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq ash*" 2>NUL

+echo ERRORLEVEL: %ERRORLEVEL%

+echo.

+

+echo %TIME%: Tasks running before attempting to executing rebaseall:

+"%SystemRoot%\System32\tasklist.exe" /V

+

 echo %TIME%: Running /usr/bin/rebaseall in the ash.exe shell

 C:\cygwin\bin\ash.exe -c '/usr/bin/rebaseall' 2>&1

 echo ERRORLEVEL: %ERRORLEVEL%

@@ -156,6 +186,14 @@
 

 echo ----------------------------------------------------------------------

 

+echo %TIME%: Deleting 'VCL Update Cygwin' scheduled task...

+"%SystemRoot%\system32\schtasks.exe" /Delete /F /TN "VCL Update Cygwin"

+echo ERRORLEVEL: %ERRORLEVEL%

+set /A STATUS+=%ERRORLEVEL%

+echo.

+

+echo ----------------------------------------------------------------------

+

 echo %SCRIPT_FILENAME% finished at: %DATE% %TIME%

 echo exiting with status: %STATUS%

 "%SystemRoot%\system32\eventcreate.exe" /T INFORMATION /L APPLICATION /SO %SCRIPT_FILENAME% /ID 555 /D "exit status: %STATUS%" 2>&1