You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ra...@apache.org on 2017/02/23 00:11:02 UTC
[2/5] git commit: updated refs/heads/master to 87f1104
CLOUDSTACK-8324: config drive data set/get scripts for the guest vm
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ea09e6c1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ea09e6c1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ea09e6c1
Branch: refs/heads/master
Commit: ea09e6c1966f072e227d3f7447644ba5599f73ab
Parents: e02003d
Author: Jayapal <ja...@apache.org>
Authored: Thu Jan 28 16:51:13 2016 +0530
Committer: Jayapal <ja...@accelerite.com>
Committed: Wed Feb 15 12:02:58 2017 +0530
----------------------------------------------------------------------
setup/bindir/cloud-get-vm-data-configdrive.in | 132 +++++++++++++++++
.../cloud-set-guest-password-configdrive.in | 130 +++++++++++++++++
.../cloud-set-guest-sshkey-configdrive.in | 107 ++++++++++++++
...et-windows-guest-password-configdrive.bat.in | 140 +++++++++++++++++++
4 files changed, 509 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea09e6c1/setup/bindir/cloud-get-vm-data-configdrive.in
----------------------------------------------------------------------
diff --git a/setup/bindir/cloud-get-vm-data-configdrive.in b/setup/bindir/cloud-get-vm-data-configdrive.in
new file mode 100644
index 0000000..40fbc78
--- /dev/null
+++ b/setup/bindir/cloud-get-vm-data-configdrive.in
@@ -0,0 +1,132 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+mountdir=/mnt/configdrive
+filepath=$mountdir/cloudstack
+
+user_data=$filepath/userdata/user_data.txt
+availability_zone=$filepath/metadata/availability_zone.txt
+cloud_identifier=$filepath/metadata/cloud_identifier.txt
+instance_id=$filepath/metadata/instance_id.txt
+local_hostname=$filepath/metadata/local_hostname.txt
+service_offering=$filepath/metadata/service_offering.txt
+vm_id=$filepath/metadata/vm_id.txt
+public_key=$filepath/metadata/public_keys.txt
+vm_password=$filepath/password/vm_password.txt
+
+# If lable name is other than config, please change the below line as required
+DefaultDisk=/dev/disk/by-label/config
+
+function usage
+{
+ echo -e "USAGE: cloud-get-vm-data -options"
+ echo -e " where options include:"
+ echo -e "\\t-m | --metadata [availability-zone | cloud-identifier | instance-id | local-hostname | service-offering | vm-id | public-key] \\n\\t\\tprint vm metadata"
+ echo -e "\\t-p | --password \\n\\t\\tprint vm password"
+ echo -e "\\t-u | --userdata \\n\\t\\tprint vm userdata"
+}
+
+function prepare_mount
+{
+ if [ ! -e $mountdir ]; then
+ mkdir $mountdir
+ chmod 700 $mountdir
+ fi
+
+ if [ -e $DefaultDisk ]; then
+ Disk=$DefaultDisk
+ else
+ BLOCK_DEVICE=$(blkid -t LABEL='config' /dev/hd? /dev/sd? /dev/xvd? -o device)
+ if [ -n $BLOCK_DEVICE ]; then
+ Disk=$BLOCK_DEVICE
+ else
+ logger -t "cloud" "Unable to get the VM data: Config drive device not found"
+ exit 1
+ fi
+ fi
+
+ mount -r $Disk $mountdir
+ if [ $? -ne 0 ]; then
+ echo "Failed mounting $Disk to /mnt/configdrive"
+ exit 1
+ fi
+}
+
+function remove_mount
+{
+ umount $mountdir
+}
+
+prepare_mount
+
+case $1 in
+ -u | --userdata ) echo -n "USERDATA: "
+ filename=$user_data
+ ;;
+ -m | --metadata ) shift
+ if [ "$1" != "" ]; then
+ case $1 in
+ availability-zone ) echo -n "availability zone: "; filename=$availability_zone
+ ;;
+ cloud-identifier ) echo -n "cloud identifier: "; filename=$cloud_identifier
+ ;;
+ instance-id ) echo -n "instance-id: "; filename=$instance_id
+ ;;
+ local-hostname ) echo -n "local-hostname: "; filename=$local_hostname
+ ;;
+ service-offering ) echo -n "service-offering: "; filename=$service_offering
+ ;;
+ vm-id ) echo -n "vm-id: "; filename=$vm_id
+ ;;
+ public-key ) echo -n "public-key: "; filename=$public_key
+ ;;
+ * ) usage
+ remove_mount
+ exit 1
+ esac
+ else
+ echo -e "METADATA\\n"
+ [ -f $availability_zone ] && echo -e "availability zone:\t" "$(cat $availability_zone)"
+ [ -f $cloud_identifier ] && echo -e "cloud identifier:\t" "$(cat $cloud_identifier)"
+ [ -f $instance_id ] && echo -e "instance-id:\t\t" "$(cat $instance_id)"
+ [ -f $local_hostname ] && echo -e "local-hostname:\t\t" "$(cat $local_hostname)"
+ [ -f $service_offering ] && echo -e "service-offering:\t" "$(cat $service_offering)"
+ [ -f $vm_id ] && echo -e "vm-id:\t\t\t" "$(cat $vm_id)"
+ [ -f $public_key ] && echo -e "public-key:\t\t" "$(cat $public_key)"
+ fi
+ ;;
+ -p | --password ) echo -n "PASSWORD: "
+ filename=$vm_password
+ ;;
+ -h | --help ) usage
+ remove_mount
+ exit 0
+ ;;
+ * ) usage
+ remove_mount
+ exit 1
+esac
+
+if [ "$filename" != "" ] && [ -e $filename ]
+then
+ cat $filename
+fi
+
+remove_mount
+exit 0
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea09e6c1/setup/bindir/cloud-set-guest-password-configdrive.in
----------------------------------------------------------------------
diff --git a/setup/bindir/cloud-set-guest-password-configdrive.in b/setup/bindir/cloud-set-guest-password-configdrive.in
new file mode 100644
index 0000000..0fe1dec
--- /dev/null
+++ b/setup/bindir/cloud-set-guest-password-configdrive.in
@@ -0,0 +1,130 @@
+ #!/bin/bash
+#
+# Init file for Password Download Client
+#
+# chkconfig: 345 98 02
+# description: Password Download Client
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+# Modify this line to specify the user (default is root)
+user=root
+
+mountdir=/mnt/configdrive
+
+# If lable name is other than config, please change the below line as required
+DefaultDisk=/dev/disk/by-label/config
+
+
+Password_File=$mountdir/cloudstack/password/vm_password.txt
+password_received=0
+
+function prepare_mount
+{
+ if [ ! -e $mountdir ]; then
+ mkdir $mountdir
+ chmod 700 $mountdir
+ fi
+
+ if [ -e $DefaultDisk ]; then
+ Disk=$DefaultDisk
+ else
+ BLOCK_DEVICE=$(blkid -t LABEL='config' /dev/hd? /dev/sd? /dev/xvd? -o device)
+ if [ -n $BLOCK_DEVICE ]; then
+ Disk=$BLOCK_DEVICE
+ else
+ logger -t "cloud" "Unable to set password to VM: Config drive not found"
+ exit 1
+ fi
+ fi
+
+ mount -r $Disk $mountdir
+ if [ $? -ne 0 ]; then
+ echo "Failed mounting $Disk to /mnt/configdrive"
+ exit 1
+ fi
+}
+
+function remove_mount
+{
+ umount $mountdir
+}
+
+prepare_mount
+
+
+if [ -f $Password_File ]
+then
+ password=$(cat $Password_File)
+ password=$(echo $password | tr -d '\r')
+ remove_mount
+
+ case $password in
+
+ "") logger -t "cloud" "Config drive did not have any password for the VM"
+ exit 0
+ ;;
+
+ "saved_password") logger -t "cloud" "VM has already saved a password"
+ exit 0
+ ;;
+
+ *) logger -t "cloud" "VM got a valid password"
+ password_received=1
+ ;;
+ esac
+else
+ remove_mount
+ logger -t "cloud" "Password set failed on VM: password file not found in config drive"
+ exit 0
+fi
+
+if [ "$password_received" = "1" ]; then
+
+ newmd5sum=$(echo $password | md5sum | awk '{print $1}')
+ if [ -f /var/vmpasswordmd5sum ]
+ then
+ oldsum=$(cat /var/vmpasswordmd5sum)
+
+ if [ "$newmd5sum" == "$oldsum" ]
+ then
+ logger -t "cloud" "There is no update of VM password from cloudstack, returning true"
+ exit 0
+ fi
+ fi
+
+ logger -t "cloud" "Changing password ..."
+ echo $user:$password | chpasswd
+
+ if [ $? -gt 0 ]
+ then
+ usermod -p `mkpasswd -m SHA-512 $password` $user
+
+ if [ $? -gt 0 ]
+ then
+ logger -t "cloud" "Failed to change password for user $user"
+ exit 1
+ else
+ logger -t "cloud" "Successfully changed password for user $user"
+ fi
+ fi
+fi
+
+ echo $newmd5sum > /var/vmpasswordmd5sum
+exit 0
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea09e6c1/setup/bindir/cloud-set-guest-sshkey-configdrive.in
----------------------------------------------------------------------
diff --git a/setup/bindir/cloud-set-guest-sshkey-configdrive.in b/setup/bindir/cloud-set-guest-sshkey-configdrive.in
new file mode 100644
index 0000000..773f92e
--- /dev/null
+++ b/setup/bindir/cloud-set-guest-sshkey-configdrive.in
@@ -0,0 +1,107 @@
+#!/bin/bash
+#
+# Init file for SSH Public Keys Download Client
+#
+# chkconfig: 345 98 02
+# description: SSH Public Keys Download Client
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+# Modify this line to specify the user (default is root)
+user=root
+
+mountdir=/mnt/configdrive
+
+# If lable name is other than config, please change the below line as required
+DefaultDisk=/dev/disk/by-label/config
+
+SSHKey_File=$mountdir/cloudstack/metadata/public_keys.txt
+keys_received=0
+
+function prepare_mount
+{
+ if [ ! -e $mountdir ]; then
+ mkdir $mountdir
+ chmod 700 $mountdir
+ fi
+
+ if [ -e $DefaultDisk ]; then
+ Disk=$DefaultDisk
+ else
+ BLOCK_DEVICE=$(blkid -t LABEL='config' /dev/hd? /dev/sd? /dev/xvd? -o device)
+ if [ -n $BLOCK_DEVICE ]; then
+ Disk=$BLOCK_DEVICE
+ else
+ logger -t "cloud" "Unable to get SSH public key: Config drive not found"
+ exit 1
+ fi
+ fi
+
+ mount -r $Disk $mountdir
+ if [ $? -ne 0 ]; then
+ echo "Failed mounting $Disk to /mnt/configdrive"
+ exit 1
+ fi
+}
+
+function remove_mount
+{
+ umount $mountdir
+}
+
+prepare_mount
+
+
+if [ -f $SSHKey_File ]
+then
+ publickey=$(cat $SSHKey_File)
+ publickey=$(echo $publickey | tr -d '\r')
+ remove_mount
+
+ if [ -z "$publickey" ]; then
+ logger -t "cloud" "Did not receive any keys"
+ exit 1
+ fi
+else
+ remove_mount
+ logger -t "cloud" "Did not receive any keys"
+ exit 1
+fi
+
+homedir=$(grep ^$user /etc/passwd|awk -F ":" '{print $6}')
+sshdir=$homedir/.ssh
+authorized=$sshdir/authorized_keys
+
+if [ ! -e $sshdir ]; then
+ mkdir $sshdir
+ chmod 700 $sshdir
+fi
+
+if [ ! -e $authorized ]; then
+ touch $authorized
+ chmod 600 $authorized
+fi
+
+
+cat $authorized|grep -v "$publickey"|tee $authorized > /dev/null
+echo "$publickey" >> $authorized
+
+which restorecon && restorecon -R -v $sshdir
+
+exit 0
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea09e6c1/setup/bindir/cloud-set-windows-guest-password-configdrive.bat.in
----------------------------------------------------------------------
diff --git a/setup/bindir/cloud-set-windows-guest-password-configdrive.bat.in b/setup/bindir/cloud-set-windows-guest-password-configdrive.bat.in
new file mode 100644
index 0000000..805150a
--- /dev/null
+++ b/setup/bindir/cloud-set-windows-guest-password-configdrive.bat.in
@@ -0,0 +1,140 @@
+@echo off
+
+REM Licensed to the Apache Software Foundation (ASF) under one
+REM or more contributor license agreements. See the NOTICE file
+REM distributed with this work for additional information
+REM regarding copyright ownership. The ASF licenses this file
+REM to you under the Apache License, Version 2.0 (the
+REM "License"); you may not use this file except in compliance
+REM with the License. You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing,
+REM software distributed under the License is distributed on an
+REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+REM KIND, either express or implied. See the License for the
+REM specific language governing permissions and limitations
+REM under the License.
+
+rem ----------------------------------------------------------------------------------------------------------------
+set PasswordReset_Script=cloud-set-guest-password-configdrive.vbs
+echo Set owshNet = CreateObject^("WScript.Network"^) > %PasswordReset_Script%
+echo strComputer = owshNet.ComputerName >> %PasswordReset_Script%
+echo Const HKEY_CURRENT_USER = ^&H80000001 >> %PasswordReset_Script%
+echo registryKeyPath = "SOFTWARE\CLOUDSTACKmd5Checksum\" >> %PasswordReset_Script%
+echo registryKeyName = "PasswordMd5Checksum" >> %PasswordReset_Script%
+echo CDPath = "" >> %PasswordReset_Script%
+echo configLabelName = "config" >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo Set fso = CreateObject ^("Scripting.FileSystemobject"^) >> %PasswordReset_Script%
+echo For Each drive In fso.Drives >> %PasswordReset_Script%
+echo If drive.DriveType = 4 And drive.IsReady Then >> %PasswordReset_Script%
+echo If drive.VolumeName = configLabelName Then >> %PasswordReset_Script%
+echo CDPath = drive.Path >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo Exit For >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo Next >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo IF CDPath = "" Then >> %PasswordReset_Script%
+echo WScript.Echo "Config Drive not found to set the password to VM" >> %PasswordReset_Script%
+echo WScript.Quit >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo PasswordFileName = "\VM_PASSWORD.txt" >> %PasswordReset_Script%
+echo PasswordFilePath = CDPath ^& "\CLOUDSTACK\PASSWORD" ^& PasswordFileName >> %PasswordReset_Script%
+echo Set ObjFile = fso.OpenTextFile^(PasswordFilePath^) >> %PasswordReset_Script%
+echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
+echo WScript.Echo "Error: " ^& PasswordFilePath ^& " --- " ^& Err.Description >> %PasswordReset_Script%
+echo WScript.Quit >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo Password = ObjFile.ReadLine >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo PasswordMd5checsumFileName = "\VM_PASSWORD_MD5CHECKSUM.txt" >> %PasswordReset_Script%
+echo PasswordMd5checsumFilePath = CDPath ^& "\CLOUDSTACK\PASSWORD" ^& PasswordMd5checsumFileName >> %PasswordReset_Script%
+echo Set ObjFile2 = fso.OpenTextFile^(PasswordMd5checsumFilePath^) >> %PasswordReset_Script%
+echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
+echo WScript.Echo "Error: " ^& PasswordMd5checsumFilePath ^& " --- " ^& Err.Description >> %PasswordReset_Script%
+echo WScript.Quit >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo registryKeyValue = ObjFile2.ReadLine >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo ' The below logic is to make sure script sets the password to VM only when new password appears in config drive >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo Set registryObject=GetObject^("winmgmts:{impersonationLevel=impersonate}!\\" ^& strComputer ^& "\root\default:StdRegProv"^) >> %PasswordReset_Script%
+echo If registryObject.EnumKey^(HKEY_CURRENT_USER, registryKeyPath, "", ""^) = 0 Then >> %PasswordReset_Script%
+echo registryObject.GetStringValue HKEY_CURRENT_USER, registryKeyPath, registryKeyName, previousRegistryKeyValue >> %PasswordReset_Script%
+echo If ^(previousRegistryKeyValue ^<^> registryKeyValue^) Then >> %PasswordReset_Script%
+echo SavePasswordChecksum^(^) >> %PasswordReset_Script%
+echo SetPasswordToVM^(^) >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo Else >> %PasswordReset_Script%
+echo Return = registryObject.CreateKey^(HKEY_CURRENT_USER, registryKeyPath^) >> %PasswordReset_Script%
+echo If ^(Return = 0^) And ^(Err.Number = 0^) Then >> %PasswordReset_Script%
+echo SavePasswordChecksum^(^) >> %PasswordReset_Script%
+echo SetPasswordToVM^(^) >> %PasswordReset_Script%
+echo Else >> %PasswordReset_Script%
+echo Wscript.Echo Now ^& vbTab ^& "Create Registry Key failed while setting the password to VM. Error = " ^& Err.Number >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo ' >> %PasswordReset_Script%
+echo ' Procedure to set the password to the VM >> %PasswordReset_Script%
+echo ' >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo Sub SetPasswordToVM^(^) >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo Set objUser = GetObject^("WinNT://" ^& strComputer ^& "/administrator"^) >> %PasswordReset_Script%
+echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
+echo WScript.Echo Now ^& vbTab ^& "Error connecting to " ^& strComputer ^& " --- " ^& Err.Description >> %PasswordReset_Script%
+echo Err.Clear >> %PasswordReset_Script%
+echo WScript.Quit >> %PasswordReset_Script%
+echo Else >> %PasswordReset_Script%
+echo Select Case Password >> %PasswordReset_Script%
+echo Case "" >> %PasswordReset_Script%
+echo WScript.Echo Now ^& vbTab ^& "Config drive did not have any password for the VM" >> %PasswordReset_Script%
+echo WScript.Quit >> %PasswordReset_Script%
+echo Case "saved_password" >> %PasswordReset_Script%
+echo WScript.Echo Now ^& vbTab ^& "VM has already saved the password" >> %PasswordReset_Script%
+echo WScript.Quit >> %PasswordReset_Script%
+echo Case else >> %PasswordReset_Script%
+echo objUser.Setpassword Password >> %PasswordReset_Script%
+echo objUser.Setinfo >> %PasswordReset_Script%
+echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
+echo wscript.Echo Now ^& vbTab ^& "Error setting password for " ^& strComputer ^& "\Administrator" ^& " --- " ^& Err.Description >> %PasswordReset_Script%
+echo Err.Clear >> %PasswordReset_Script%
+echo WScript.Quit >> %PasswordReset_Script%
+echo Else >> %PasswordReset_Script%
+echo WScript.Echo Now ^& vbTab ^& "Password set for " ^& strComputer ^& "\Administrator" >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo End Select >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo End Sub >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo Sub SavePasswordChecksum^(^) >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo Return = registryObject.SetStringValue^(HKEY_CURRENT_USER, registryKeyPath, registryKeyName, registryKeyValue^) >> %PasswordReset_Script%
+echo If ^(Return ^<^> 0^) Or ^(Err.Number ^<^> 0^) Then >> %PasswordReset_Script%
+echo Wscript.Echo Now ^& vbTab ^& "SetStringValue to Registry Key failed while setting the password to VM. Error = " ^& Err.Number >> %PasswordReset_Script%
+echo End If >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+echo End Sub >> %PasswordReset_Script%
+echo. >> %PasswordReset_Script%
+rem -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+cscript //Nologo %PasswordReset_Script%