From 6bf7377d124ef5a325f0640f102bfead27f19dd3 Mon Sep 17 00:00:00 2001 From: Nahum Timerman Date: Thu, 8 Feb 2018 12:59:35 +0200 Subject: [PATCH 1/5] fix issue with percent signs in environment variables --- .../cm/customscript/domain/windows_script_executor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package/cloudshell/cm/customscript/domain/windows_script_executor.py b/package/cloudshell/cm/customscript/domain/windows_script_executor.py index 4fdc829..f902404 100644 --- a/package/cloudshell/cm/customscript/domain/windows_script_executor.py +++ b/package/cloudshell/cm/customscript/domain/windows_script_executor.py @@ -132,7 +132,8 @@ def run_script(self, tmp_folder, script_file, env_vars, output_writer, print_out """ code = '' for key, value in (env_vars or {}).iteritems(): - code += '\n$env:%s = "%s"' % (key, str(value)) + code += '\n$env:%s = "%s"' % (key, str(value).replace('%', '%%')) # percent signs in environment variables + # will cause unexpected errors when using string interpolation code += """ $path = Join-Path "%s" "%s" Invoke-Expression "& '$path'" From 66546013b5d139cc605e13fcc756817793e734d0 Mon Sep 17 00:00:00 2001 From: Nahum Timerman Date: Thu, 8 Feb 2018 13:27:48 +0200 Subject: [PATCH 2/5] click --- .../domain/windows_script_executor.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/package/cloudshell/cm/customscript/domain/windows_script_executor.py b/package/cloudshell/cm/customscript/domain/windows_script_executor.py index f902404..d2ae328 100644 --- a/package/cloudshell/cm/customscript/domain/windows_script_executor.py +++ b/package/cloudshell/cm/customscript/domain/windows_script_executor.py @@ -114,11 +114,11 @@ def copy_script(self, tmp_folder, script_file): for bulk in bulks: encoded_bulk = base64.b64encode(bulk.encode("utf-8")) code = """ -$path = Join-Path "%s" "%s" -$data = [System.Convert]::FromBase64String("%s") +$path = Join-Path "{0}" "{1}" +$data = [System.Convert]::FromBase64String("{2}") Add-Content -value $data -encoding byte -path $path -""" - result = self._run_cancelable(code, tmp_folder, script_file.name, encoded_bulk) +""".format(tmp_folder, script_file.name, encoded_bulk) + result = self._run_cancelable(code) if result.status_code != 0: raise Exception(ErrorMsg.COPY_SCRIPT % result.std_err) @@ -135,10 +135,10 @@ def run_script(self, tmp_folder, script_file, env_vars, output_writer, print_out code += '\n$env:%s = "%s"' % (key, str(value).replace('%', '%%')) # percent signs in environment variables # will cause unexpected errors when using string interpolation code += """ -$path = Join-Path "%s" "%s" +$path = Join-Path "{0}" "{1}" Invoke-Expression "& '$path'" -""" - result = self._run_cancelable(code, tmp_folder, script_file.name) +""".format(tmp_folder, script_file.name) + result = self._run_cancelable(code) if print_output: output_writer.write(result.std_out) output_writer.write(result.std_err) @@ -164,8 +164,10 @@ def delete_temp_folder(self, tmp_folder): # self.logger.debug('Stderr:' + result.std_err) # return result - def _run_cancelable(self, txt, *args): - ps_code = txt % args + def _run_cancelable(self, ps_code): + """ + :type ps_code: str + """ self.logger.debug('PowerShellScript:' + ps_code) bat_code = 'powershell -encodedcommand %s' % base64.b64encode(ps_code.encode('utf_16_le')).decode('ascii') From a54412fb8707db2067c2185b4dbca8b8427ad81e Mon Sep 17 00:00:00 2001 From: Nahum Timerman Date: Thu, 8 Feb 2018 13:32:09 +0200 Subject: [PATCH 3/5] thing --- .../cm/customscript/domain/windows_script_executor.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package/cloudshell/cm/customscript/domain/windows_script_executor.py b/package/cloudshell/cm/customscript/domain/windows_script_executor.py index d2ae328..5e16abc 100644 --- a/package/cloudshell/cm/customscript/domain/windows_script_executor.py +++ b/package/cloudshell/cm/customscript/domain/windows_script_executor.py @@ -132,8 +132,7 @@ def run_script(self, tmp_folder, script_file, env_vars, output_writer, print_out """ code = '' for key, value in (env_vars or {}).iteritems(): - code += '\n$env:%s = "%s"' % (key, str(value).replace('%', '%%')) # percent signs in environment variables - # will cause unexpected errors when using string interpolation + code += '\n$env:%s = "%s"' % (key, str(value)) code += """ $path = Join-Path "{0}" "{1}" Invoke-Expression "& '$path'" From 4464cacc4ffa78751be09a968b14f31ca9007e39 Mon Sep 17 00:00:00 2001 From: Nahum Timerman Date: Thu, 8 Feb 2018 13:37:46 +0200 Subject: [PATCH 4/5] increase coverage --- package/tests/test_windows_script_executor.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/package/tests/test_windows_script_executor.py b/package/tests/test_windows_script_executor.py index 058846b..6ca887a 100644 --- a/package/tests/test_windows_script_executor.py +++ b/package/tests/test_windows_script_executor.py @@ -74,6 +74,12 @@ def test_copy_script_fail(self): # Run script + def test_get_expected_file_extensions(self): + executor = WindowsScriptExecutor(self.logger, self.host, self.cancel_sampler) + file_extensions = executor.get_expected_file_extensions() + self.assertTrue(file_extensions.length == 1) + self.assertTrue('.ps1' in file_extensions) + def test_run_script_success(self): executor = WindowsScriptExecutor(self.logger, self.host, self.cancel_sampler) output_writer = Mock() From 12c9aafe830c25d52fc34d9cf8d21d4044890f36 Mon Sep 17 00:00:00 2001 From: Nahum Timerman Date: Thu, 8 Feb 2018 13:43:41 +0200 Subject: [PATCH 5/5] $ --- package/tests/test_windows_script_executor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/tests/test_windows_script_executor.py b/package/tests/test_windows_script_executor.py index 6ca887a..7ca0529 100644 --- a/package/tests/test_windows_script_executor.py +++ b/package/tests/test_windows_script_executor.py @@ -77,7 +77,7 @@ def test_copy_script_fail(self): def test_get_expected_file_extensions(self): executor = WindowsScriptExecutor(self.logger, self.host, self.cancel_sampler) file_extensions = executor.get_expected_file_extensions() - self.assertTrue(file_extensions.length == 1) + self.assertTrue(len(file_extensions)==1) self.assertTrue('.ps1' in file_extensions) def test_run_script_success(self):